清晰理解基本的架构设计模式

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 【6月更文挑战第16天】广泛应用在如Spring、Merb、Django和.NET MVC等框架中。核心价值在于组件解耦,适合插件化和Web应用。尽管有变体,如Django的MTV,关键在于明确的分离。[1978原文][1] | [IBM文档][2]

1 简介

C/S架构(Client/Server)和MVC模式(Model-View-Controller)是软件开发中常见的两种架构模式。
C/S架构,即客户端/服务器架构,是一种网络应用程序架构。它将任务和负载在客户端和服务器之间进行分布,客户端是用户界面和输入的地方,而服务器是数据处理和存储的地方

MVC设计模式,源于Trygve Reenskaug在1978年的论文,旨在分离表示层。模型管理业务逻辑和数据源,视图显示模型信息,控制器处理用户交互。

treeoflife6.png

2 架构模式 CS

CS顾名思义,client service结构的应用,我们计划将应用程序实现为CS结构,其中Service使用MVC的方式组织。

  • CS模型特点

    资源共享:服务器可以集中管理数据和资源,多个客户端可以共享这些资源。
    安全性:服务器可以提供统一的安全管理,防止未经授权的访问。
    性能:通过分布式计算,客户端和服务器可以分别处理不同的任务,提高整体性能。
    可扩展性:可以通过增加服务器和客户端的数量来扩展系统。
    

一个典型的C/S架构应用是电子邮件系统。

  客户端:电子邮件客户端软件(如Outlook、Thunderbird)负责与用户交互,允许用户撰写、发送和接收电子邮件。
  服务器:邮件服务器(如Microsoft Exchange、Postfix)负责存储电子邮件、管理用户账户和处理邮件传输。

在这个架构中,客户端向服务器发送邮件请求,服务器接收并处理请求后,更新邮件存储。

3 架构模式MVC

MVC模式,即模型-视图-控制器模式,是一种软件设计模式,用于实现用户界面和业务逻辑的分离。它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。

关于MVC很很多变化的版本, 这里只引用一些IBM和Microsoft的观点。

  • 共同特点

    模块化:将应用程序分成三个独立的部分,便于开发、测试和维护。
    低耦合:模型、视图和控制器之间的依赖性较低,可以独立修改。
    高重用性:视图和控制器可以复用,不同的视图可以共享同一个模型。
    
  • 组成部分

    Model(模型):负责数据的存储和业务逻辑处理。例如,数据库、数据对象、业务规则等。
    View(视图):负责数据显示和用户界面展示。例如,HTML页面、GUI组件等。
    Controller(控制器):负责处理用户输入,并更新模型和视图。例如,处理HTTP请求、调用模型方法、更新视图等。
    

Trygve Reenskaug 在 1978 年写了第一篇关于 MVC 的论文试图解决表示(建模)复杂现实世界系统到数字世界的问题。

他最初称其为 Thing Model View Editor 模式,但他很快将该模式的名称更改为 Model View Controller 模式。 IBM发布了详细的建模方法。

在前端框架中,模型是业务逻辑加上一个或多个数据源,如数据库。 VIEW 表示向用户显示有关模型信息的用户界面。CONTROLLER 流量控制机制,处理用户与应用的交互。

模型——模型代表知识。模型可以是单个对象,也可以是对象的某种结构。

VIEWS — 视图是其模型的(视觉)表示。它通常突出显示模型的某些属性并抑制其他属性。因此,它充当表示过滤器。

CONTROLLERS——控制器是用户和系统之间的链接。它通过安排相关视图在屏幕上的适当位置显示自己来为用户提供输入。通过向用户呈现菜单或其他给出命令和数据的方式来提供用户输出的方式。控制器接收这样的用户输出,将其翻译成适当的消息并将这些消息传递给一个或多个视图。

MVC 的核心,应该是分离表示。非常适合插件驱动的复合 Web 应用程序。
image.png

4 一个模型视图的例子

模型视图控制器模式的历史和演变。不是这里的重点。人们经常使用 MVC 这个词来表示不同的东西

它被用于多种地方,包括UI模型视图控制。 也被用于服务的组织,以适应流式的访问服务。
JAVA的Spring,Ruby的Merb,Python的Django,.Net的 .NET MVC
还有我们将要实现的。

有些框架比如Django自称为MTV,但是最重要的是,我们应该知道从明确的分离点获益。

服务将成为的样子:

image.png

5 实现一个简单的MVC应用

以下例子中控制器接收用户请求,调用模型中的方法获取数据,然后将数据传递给视图进行显示。模型和视图之间没有直接的交互,所有的更新和数据流动都通过控制器完成。

  • Model
    首先创建Model(模型):代表书店中的数据,包括书籍信息、用户信息和订单信息。
public class Book {
    private String title;
    private String author;
    private double price;

  }
  • Views
    View(视图):负责显示书籍列表的页面。

    <html>
    <body>
        <h1>Book List</h1>
        <ul>
          <% for (Book book : books) { %>
            <li><%= book.getTitle() %> by <%= book.getAuthor() %> - $<%= book.getPrice() %></li>
          <% } %>
        </ul>
    </body>
    </html>
    
  • Control
    Controller(控制器):处理用户请求,更新模型和视图。
  public class BookController {
      private BookService bookService;

      public BookController(BookService bookService) {
    this.bookService = bookService;
}

  public void handleRequest(HttpServletRequest request, HttpServletResponse response) {
    List<Book> books = bookService.getAllBooks();
    request.setAttribute("books", books);
    request.getRequestDispatcher("/booklist.jsp").forward(request, response);
  }
  }

6 参考链接:

C/S架构适用于需要分布式计算、资源共享和高安全性的应用,如电子邮件系统、在线游戏和企业内部应用。

MVC模式适用于需要清晰分离业务逻辑和用户界面的应用,如Web应用、桌面应用和移动应用。

1978 原文 http://heim.ifi.uio.no/~trygver/2007/MVC_Originals.pdf

https://publib.boulder.ibm.com/infocenter/radhelp/v6r0m1/index.jsp?topic=/com.ibm.etools.struts.doc/topics/cstrdoc001.html

目录
相关文章
|
12天前
|
监控 安全 API
探索微服务架构中的API网关模式
【7月更文挑战第8天】在微服务架构的海洋中,API网关扮演着至关重要的灯塔角色。本文将深入探讨API网关的核心概念、设计原则以及它在现代分布式系统中的关键作用。我们将从API网关的定义和功能出发,逐步剖析其如何优化微服务之间的通信,保障服务安全,实现流量控制与监控,以及促进服务的快速迭代。通过案例分析,我们还将揭示API网关在实际部署中可能面临的挑战及应对策略。文章旨在为后端开发者和架构师提供一套完整的API网关解决方案,帮助他们构建更加高效、稳定且安全的微服务环境。
|
2天前
|
负载均衡 安全 API
探索微服务架构中的API网关模式
【7月更文挑战第18天】在微服务架构中,API网关不仅是流量的守门人,更是服务的协调者。本文将深入探讨API网关的核心作用、设计原则以及实现策略,揭示其在微服务生态系统中不可或缺的地位。通过案例分析,我们将一窥API网关如何优雅地处理服务发现、负载均衡、认证授权等关键任务,同时确保系统的弹性和安全性。
|
7天前
|
监控 负载均衡 安全
探索微服务架构中的API网关模式
【7月更文挑战第13天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务间的通信和客户端请求。本文将深入剖析API网关的核心作用、设计考量以及实现策略,为构建高效、可靠的分布式系统提供实践指南。
28 10
|
4天前
|
消息中间件 负载均衡 网络协议
探索微服务架构中的服务通信模式
【7月更文挑战第16天】在微服务架构的海洋中,服务间的通信宛如细丝相连,维系着整个系统的协同与和谐。本文将深入探讨微服务之间如何通过同步与异步通信模式进行交互,并剖析这些模式背后的技术原理及其对系统性能和可扩展性的影响。我们将从理论到实践,一探究竟。
19 6
|
5天前
|
缓存 负载均衡 监控
探索微服务架构中的API网关模式
在微服务架构的海洋中,API网关扮演着灯塔的角色,为迷失方向的请求指引道路。本文将深入分析API网关的核心功能、设计策略以及在实际应用中的优化实践,帮助开发者构建更加高效、稳定的微服务系统。
|
4天前
|
缓存 负载均衡 监控
探索微服务架构中的API网关模式
【7月更文挑战第16天】在微服务架构的复杂网络中,API网关扮演着交通枢纽的角色,它不仅简化了客户端与众多微服务间的交互,还提升了整个系统的可扩展性与安全性。本文将深入探讨API网关的核心概念、设计模式以及在实际应用中的考量因素,为开发者提供实现高效、稳定微服务系统的实用指南。
20 4
|
9天前
|
消息中间件 API 开发者
探索微服务架构中的服务通信模式
【7月更文挑战第11天】在微服务架构的世界中,服务的通信是构建高效、可维护系统的关键。本文将深入探讨微服务架构中常见的服务通信模式,包括同步通信与异步通信机制,并比较它们在不同场景下的适用性及优缺点。文章旨在为后端开发者提供一份实用的指南,帮助他们在选择适合自己项目需求的通信模式时做出明智的决策。
|
10天前
|
负载均衡 监控 安全
探索微服务架构中的API网关模式
【7月更文挑战第10天】在微服务的大潮中,API网关作为系统的单一入口点,承载着请求转发、负载均衡、认证授权等关键任务。本文深入探讨了API网关的设计原则、实现方式以及在微服务架构中的作用和挑战,旨在为后端开发者提供一套实用的API网关构建指南。
16 1
|
12天前
|
负载均衡 监控 安全
探索微服务架构中的API网关模式
【7月更文挑战第8天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。本文将深入探讨API网关的核心价值、设计原则以及实现策略,旨在为开发者提供构建高效、可靠API网关的实用指南。
|
16天前
|
负载均衡 监控 安全
微服务架构中的API网关模式解析
【7月更文挑战第4天】在微服务架构中,API网关不仅是一个技术组件,它是连接客户端与微服务之间的桥梁,负责请求的路由、负载均衡、认证、限流等关键功能。本文将深入探讨API网关的设计原则、实现方式及其在微服务架构中的作用和挑战,帮助读者理解如何构建高效、可靠的API网关。