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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
容器镜像服务 ACR,镜像仓库100个 不限时长
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【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

目录
相关文章
|
18天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
130 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
3月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
201 6
|
3月前
|
缓存 监控 API
探索微服务架构中的API网关模式
【10月更文挑战第5天】随着微服务架构的兴起,企业纷纷采用这一模式构建复杂应用。在这种架构下,应用被拆分成若干小型、独立的服务,每个服务围绕特定业务功能构建并通过HTTP协议协作。随着服务数量增加,统一管理这些服务间的交互变得至关重要。API网关作为微服务架构的关键组件,承担起路由请求、聚合数据、处理认证与授权等功能。本文通过一个在线零售平台的具体案例,探讨API网关的优势及其实现细节,展示其在简化客户端集成、提升安全性和性能方面的关键作用。
83 2
|
3月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
88 2
|
3月前
|
存储 缓存 监控
探索微服务架构中的API网关模式
【10月更文挑战第1天】探索微服务架构中的API网关模式
100 2
|
2月前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
2月前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
53 3
|
2月前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
55 2
|
4月前
|
JSON 监控 安全
探索微服务架构中的API网关模式
【9月更文挑战第22天】在微服务架构的海洋中,API网关如同一位智慧的守门人,不仅管理着服务的进出,还维护着整个系统的秩序。本文将带你一探究竟,看看这位守门人是如何工作的,以及它为何成为现代云原生应用不可或缺的一部分。从流量控制到安全防护,再到服务聚合,我们将一起解锁API网关的秘密。
|
5月前
|
分布式计算 负载均衡 API
微服务架构设计原则与模式
【8月更文第29天】随着云计算和分布式计算的发展,微服务架构已成为构建大型复杂应用的一种流行方式。这种架构模式将单个应用程序分解成一组小型、独立的服务,每个服务运行在其自己的进程中,并通过轻量级机制(通常是HTTP资源API)进行通信。本文将探讨微服务架构的基本设计原则、常用模式以及如何有效地划分服务边界。
477 3