谈谈对 MVC、MVP、MVVM 模式的理解

文章推荐2年前 (2022)更新 Alarikshaw
447 0 0

在开发图形界面应用程序的时候,会把管理用户界面的层次称为 View应用程序的数据为 ModelModel 提供数据操作的接口,执行相应的业务逻辑。

MVC

MVC 除了把应用程序分为 ViewModel层,还额外的加了一个 Controller层,它的职责是进行 Model 和 View 之间的协作(路由、输入预处理等)的应由逻辑(application logic)。

Model 进行处理业务逻辑。

用户对 View 操作以后,View 捕获到这个操作,会把处理的权利交移给ControllerPass calls)。

Controller 会对来自 View 数据进行预处理、决定调用哪个 Model 的接口。

然后由 Model 执行相关的业务逻辑。

Model 变更了以后,会通过观察者模式(Observer Pattern)通知 View

View 通过观察者模式收到 Model 变更的消息以后,会向 Model 请求最新的数据,然后重新更新界面。

View -> Controller -> Modal -> View(观察者模式) -> Model

MVP

和 MVC 模式一样,用户对 View 的操作都会从 View 交易给 Presenter

Presenter 会执行相应的应用程序逻辑,并且会对 Model 进行相应的操作。

而这时候 Model 执行业务逻辑以后,也是通过观察者模式把自己变更的消息传递出去,但是是传给 Presenter 而不是 View

Presenter 获取到 Model变更的消息以后,通过 View 提供的接口更新界面。

View -> Presenter -> Model -> Presenter -> View

MVVM

MVVM 可以看做是一种特殊的 MVPPassive View)模式,或者说是对 MVP 模式的一种改良。

MVVM 代表的是 Model-View-ViewModel,可以简单把 ViewModel 理解为页面上所显示内容的数据抽象,和 Domain Model 不一样,ViewModel 更适合用来描述 View。 MVVM 的依赖关系和 MVP 依赖关系一致,只不过是把 P 换成了 VM

MVVM的调用关系:

MVVM 的调用关系和 MVP 一样。

但是,在 ViewModel 当中会有一个叫 Binder,或者是 Data-binding engine 的东西。

以前全部由 Presenter 负责的 View 和 Model 之间数据同步操作交由给 Binder 处理。

你只需要在View 的模板语法当中,指令式声明 View 上的显示的内容是和 Model 的哪一块数据绑定的。

当 ViewModel 对进行 Model 更新的时候,Binder 会自动把数据更新到 View 上,当用户对 View 进行操作(例如表单输入),Binder 也会自动把数据更新到 Model 上。

这种方式称为:Two-way data-binding,双向数据绑定。

可以简单而不恰当地理解为一个模板引擎,但是会根据数据变更实时渲染。

ViewModel -> Model && binder -> View

View -> binder -> Model

© 版权声明

相关文章

暂无评论

暂无评论...