Model-View-Controller
在APP的实际应用中,C是ViewController,不止承担Controller的职责,还承担部分View的职责(包括生命周期管理和数据填充),V只剩下绘制的职责。
缺点就是C太臃肿。
Model-View-Presenter
依赖关系同MVC
不同在于,针对接口编程,M、V、P之间通过接口交互
采用 MVP 模式,UIViewController 和 Activity 就明确地划分为 View 角色了,原有的 Controller 角色的职责则交由 Presenter 负责
缺点在于:接口太多,代码增多,项目复杂度提升
Model-View-ViewModel
MVVM 的关系图和 MVP 很相似,最大的不同在于 View 和 ViewModel 之间主要是通过数据绑定的方案来实现交互的。
数据绑定:通过将 View 的属性绑定到 ViewModel,可以使两者之间松耦合,也完全不需要在 ViewModel 里写代码去直接更新一个 View。
根据绑定方向,可以是:
单向绑定:ViewModel 与 View 绑定之后,ViewModel 变化后,View 会自动更新,但反之不然,即数据传递的方向是单向的。**(ViewModel —> View)**用于无需编辑的数据
双向绑定:ViewModel 与 View 绑定之后,如果 View 和 ViewModel 中的任何一方变化后,另一方都会自动更新,这就是双向绑定。(Model <—> View)用于需要编辑的数据
根据数据内容,可以是:
属性绑定:比如TextView的内容绑定
命令绑定:比如Button的点击事件绑定
实现数据绑定,通常采用发布者-订阅者模式 (观察者模式 ),比如Android的Jetpack就是,Vue和React也是