Web应用中MVC、Model2、MVP 与 MVVM 软件设计模式简述

MVC

MVC模式想做的,是把界面(UI)和逻辑(Logic)进行分离。

其中 Controller  和 View 处理界面,Model 则负责逻辑。

随着多年的发展,MVC模式有了很多变化,统称为MVC-like。

本文中涉及的svg图片,均可在:https://github.com/aspirantzhang/blog/tree/main/mvc-model2-mvp-mvvm 下载并使用draw.io进行编辑。

经典MVC

经典MVC模式

在经典MVC模式中,View是系统的核心,由View发起动作,Controller作为动作的执行者,负责根据预定逻辑更新Model,至于Model更新后做了什么,Controller不参与。而Model一旦更新,通过观察者模式,View可以监测到变化,并且根据Model的变化更新视图。

经典MVC模式主要为桌面应用程序设计,不太适合Web应用。

适用于Web应用的MVC模式:Model 2

Model 2 MVC模式

 

Model2最初为JSP设计,与后来的ASP.NET MVC类似。

在Model2模式中,Controller是系统的核心,用户所有请求被 Controller 拦截(Front Controller模式,servlet / filter)。Controller 从 Model 获取需要的数据,并整合成 View 层需要的 Domain Objects(一般包含数据和业务逻辑,POJO / JavaBean)。随后,Controller 根据结果调用适当的 View 进行展示。

此模式下,View 和 Model 的部分可能有多种实现。一般倾向于单向互通(即View可直接获取Model)或间接互通。

MVP

MVP模式

MVP 模式下,View 与 Model 完全不互通,强化 Controller (即 Presenter) 的指挥权利,Model 只可被 Presenter 调用。

Presenter 和 View 完全通过某种协议(接口)来通信,使 Presenter 和 View 在功能上也能保持相对独立。

MVVM

MVVM模式

与MVP相比,其中 Model 无明显变化,View 与 Presenter 的通信接口由双向数据绑定系统(data binding system)代替。

Presenter 被替换为 ViewModel,突出它对视图的控制权利,负责处理视图的state和logic。

该模式中,View保持瘦小,ViewModel 非常大。View 与 Model 依然无任何联系。

部分参考资料:

Presentation Patterns : MVC, MVP, PM, MVVM

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/mvvm

MVVM in Delphi: Architecting and Building Model View ViewModel Applications – by John Kouraklis

点赞