MVC

Model-View-Controller

在APP的实际应用中,C是ViewController,不止承担Controller的职责,还承担部分View的职责(包括生命周期管理和数据填充),V只剩下绘制的职责。

缺点就是C太臃肿。

MVP

Model-View-Presenter

依赖关系同MVC

不同在于,针对接口编程,M、V、P之间通过接口交互

采用 MVP 模式,UIViewController 和 Activity 就明确地划分为 View 角色了,原有的 Controller 角色的职责则交由 Presenter 负责

Untitled

缺点在于:接口太多,代码增多,项目复杂度提升

MVVM

Model-View-ViewModel

MVVM 的关系图和 MVP 很相似,最大的不同在于 View 和 ViewModel 之间主要是通过数据绑定的方案来实现交互的。

数据绑定:通过将 View 的属性绑定到 ViewModel,可以使两者之间松耦合,也完全不需要在 ViewModel 里写代码去直接更新一个 View。

Untitled

根据绑定方向,可以是:

单向绑定:ViewModel 与 View 绑定之后,ViewModel 变化后,View 会自动更新,但反之不然,即数据传递的方向是单向的。**(ViewModel —> View)**用于无需编辑的数据

双向绑定:ViewModel 与 View 绑定之后,如果 View 和 ViewModel 中的任何一方变化后,另一方都会自动更新,这就是双向绑定。(Model <—> View)用于需要编辑的数据

根据数据内容,可以是:

属性绑定:比如TextView的内容绑定

命令绑定:比如Button的点击事件绑定

实现数据绑定,通常采用发布者-订阅者模式 (观察者模式,比如Android的Jetpack就是,Vue和React也是