1 简介
C/S架构(Client/Server)和MVC模式(Model-View-Controller)是软件开发中常见的两种架构模式。
C/S架构,即客户端/服务器架构,是一种网络应用程序架构。它将任务和负载在客户端和服务器之间进行分布,客户端是用户界面和输入的地方,而服务器是数据处理和存储的地方
MVC设计模式,源于Trygve Reenskaug在1978年的论文,旨在分离表示层。模型管理业务逻辑和数据源,视图显示模型信息,控制器处理用户交互。
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 应用程序。
4 一个模型视图的例子
模型视图控制器模式的历史和演变。不是这里的重点。人们经常使用 MVC 这个词来表示不同的东西
它被用于多种地方,包括UI模型视图控制。 也被用于服务的组织,以适应流式的访问服务。
JAVA的Spring,Ruby的Merb,Python的Django,.Net的 .NET MVC
还有我们将要实现的。
有些框架比如Django自称为MTV,但是最重要的是,我们应该知道从明确的分离点获益。
服务将成为的样子:
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