知识卡片

MVC风格

结构图卡

内容

模型-视图-控制器(MVC)风格最初针对Smalltalk 80提出,广泛用于人机交互界面的设计。模型(Model)是应用程序的核心,封装问题的核心数据、逻辑关系和计算功能,独立于具体界面和I/O操作——从模型获取信息的对象都必须注册为该模型的视图,模型接收视图发出的操作请求、向视图返回处理结果,模型的修改最终会传递给所有关联视图。视图(View)是模型的表示,为用户展示模型信息,一个模型可以对应多个视图,功能仅限于采集数据、处理数据和响应用户请求。控制器(Controller)负责处理用户与系统的交互,接收用户输入并映射成服务请求发给模型或视图,是使模型和视图协调工作的核心部件,与视图一一对应。三者之间靠”变化-传播机制”联系:当控制器改变模型时,所有关联视图都必须反映这个变化——如果控制器的行为依赖模型状态,就要注册并提供相应更新操作,由模型状态变化激发控制器行为、进而导致视图更新。这个机制解决的核心问题是”一份数据、多个展示形式如何保持同步”,而不是简单的三层代码分离。优点是多视图与一个模型对应时变化-传播机制保证所有视图和控制器同步、便于维护;模型独立于视图,移植性好;三个独立部分中改变一个就能满足功能变化需求。缺点是增加了系统设计和运行复杂性;视图与控制器连接过紧密,妨碍二者独立重用;视图访问模型的效率较低,因为模型操作接口不统一、视图常需多次访问才能获得足够数据,频繁访问未变化的数据还会拖累性能。目前主流MVC框架包括传统的Struts、WebWork和新兴的Spring MVC、Tapestry、JSF等。

结构图

flowchart LR
    U[用户] -->|输入| C[控制器 Controller]
    C -->|映射为服务请求| M[模型 Model]
    M -->|变化-传播: 通知所有关联视图| V1[视图1]
    M -->|通知| V2[视图2]
    V1 -->|获取数据| M
    V2 -->|获取数据| M

参考来源

- 位置:《软件架构理论与实践》第4章《软件架构的风格与模式》"4.3.20 模型-视图-控制器风格"节(源文件:_epub-src/OEBPS/text00034.html) - 结论依据:原文说明"当控制器改变模型时,所有与该模型相关联的视图都应该反映这个变化……这种变化–传播机制是模型、视图和控制器之间的联系纽带",并分别说明模型/视图/控制器各自的职责边界,直接支撑本卡片的结构图与内容解释。 - 原始内容:控制器负责处理用户与系统之间的交互,为用户提供操作接口。用户通过控制器与系统进行交互。控制器接收用户输入,同时将输入事件映射成服务请求,发送给模型或视图……这种变化–传播机制是模型、视图和控制器之间的联系纽带。