MVC MVP MVVM总结

MVC

MVC MVP MVVM总结
MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)控制器(Controller)

组成部分

模型(Model):业务逻辑部分,具体的算法逻辑在这一部分中。
视图(View):UI组件,在Android中就是TextView、Button、Activity等组件。
控制器(Controller):View层收到的用户请求转发给控制器,控制器通知模型进行具体的操作。

请求流程

  1. View接受用户的请求
  2. View传递请求给Controller
  3. Controller操作Model进行逻辑处理
  4. Model处理完后通知View更新数据(通常是通过回调)
  5. View现实更新的数据

优点

1.在大型项目中使项目结构更加清晰
2.降低了View和Model的耦合性

缺点

1.在Android中Controller和View不能彻底分离,Controller和View都在Activity中,当业务需求不断增长,Activity的代码会变得庞大臃肿。
2.Controller和View不能彻底分离,意味着View层和Model层还存在比较高的耦合度。

MVP

MVC MVP MVVM总结
MVP和MVC最大的区别就是,在MVP中,View和Model彻底解耦,View和Model不再通信,而是通过Presenter(相当于桥梁)。

请求流程

1.View接收用户请求
2.View将请求转给Presenter
3.Presenter通知Model进行逻辑处理
4.Model处理完成后通过回调告诉Presenter
5.Presenter通知View更新数据
6.View显示更新的数据

优点

1)复杂的逻辑处理放在presenter进行处理,减少了activity的臃肿。
2)M层与V层完全分离,修改V层不会影响M层,降低了耦合性。
3)P层与V层的交互是通过接口来进行的,便于单元测试。

缺点

1)每个view都有presenter ,类相对比较多。

MVVM

Model-View-ViewModel
MVC MVP MVVM总结
MVP的升级版,流程与MVP类似,但引入了Data Binding技术,实现View和ViewModel数据的双向绑定,进一步降低View和ViewModel的耦合度,减轻Activity的压力。

优点

1)引入Data Binding技术后,Activity减少了很多冗余的代码,如findViewById等,使得Activity的代码非常简洁。
2)双向绑定时,当Model变化时,View-Model会自动更新,View也会自动变化。

缺点

1)数据绑定使得 Bug 很难被调试。
2)数据双向绑定不利于代码重用。

总结

其实MV+X模式的目的都是解耦,把View和Model分离,View层只负责更新UI,Model层负责具体的算法逻辑、耗时操作等。值得注意的是,不能为了用模式而使用模式,模式并不能简化我们的系统,甚至可能使系统更加难以理解(多了很多的接口),但在大型项目,这些代价换来的是良好的灵活性和易维护性。