Android架构学习MVC、MVP、MVVM(一)

时间:2023-01-06 21:14:05

一直在敲代码,最近看了Android架构方面的知识,做下总结记录。主要有MVC、MVP、MVVP。

MVX(MVC 、MVP 、MVVM等的统称)

根据M与V的数据传递流程不同。

MVC ---》MVP--》MVVM


MVC(模型-视图-控制器、Model View Controller)

运行机制:如下图。箭头方向表示数据交互传递的方向。

Android架构学习MVC、MVP、MVVM(一)

优点

  1. 把业务逻辑全部分离到Controller中,模块化程度高。当业务逻辑变更的时候,不需要变更View和Model,只需要更换Controller就行了。
  2. 须手动或通过观察者模式进行多视图更新。

缺点

  1. Controller测试困难。
  2. View无法组件化,复用性较差。View是强依赖特定的Model的,如果需要把这个View抽出来作为一个另外一个应用程序可复用的组件就困难了。因为不同程序的的Model是不一样的

使用场景:适用于较小,功能较少,业务逻辑较少的项目。

参考资料

http://blog.csdn.net/honeybaby201314/article/details/50782571#comments


MVP( 模型-视图-表现类 、Model-View-Presenter)

运行机制:如下图。

Android架构学习MVC、MVP、MVVM(一)

优点:

  1. 便于测试。Presenter对View是通过接口进行,在对Presenter进行不依赖UI环境的单元测试的时候。可以通过Mock一个 View对象,这个对象只需要实现了View的接口即可,单元测试的时候就可以完整的测试Presenter业务逻 辑的正确性。
  2. View可以进行组件化。在MVP当中,View不依赖Model。这样就可以让View从特定的业务场景中脱离出来,可以说View可以做到对业务逻辑完全无知。它只需要提供一系列接口提供给上层操作。
  3. view高度复用。
  4. 解耦。

缺点:

  1. 维护比较困难。Presenter中除了业务逻辑以外,还有大量的View->Model,Model->View的手动同步逻辑,造成Presenter比较笨重,维护起来会比较困难。

使用场景:视图界面不是很多的项目中。

参考资料:

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0227/2503.html

http://blog.csdn.net/lmj623565791/article/details/46596109

http://blog.csdn.net/knxw0001/article/details/39637273

http://kymjs.com/code/2015/11/09/01

详解业务逻辑:http://kb.cnblogs.com/page/50470/


MVVM(模型-视图-视图模型、Model-View-ViewModel)

运行机制:如下图。

Android架构学习MVC、MVP、MVVM(一)

优点

  1. 提高可维护性。解决了MVP大量的手动View和Model同步的问题,提供双向绑定机制。提高了代码的可维护性。
  2. 简化测试。因为同步逻辑是交由Binder做的,View跟着Model同时变更,所以只需要保证Model的正确性,View就正确。大大减少了对View同步更新的测试。
  3. ViewModle易于单元测试。

缺点

  1. 过于简单的图形界面不适用。
  2. 对于大型的图形应用程序,视图状态较多,ViewModel的构建和维护的成本都会比较高。
  3. 数据绑定的声明是指令式地写在View的模版当中的,这些内容是没办法去打断点debug的。

使用场景:适用于界面展示的数据较多的项目。

参考资料:

https://segmentfault.com/a/1190000002876984

http://blog.csdn.net/u010687392/article/details/47319623

其他架构:

clean-Architecture

参考资料:

http://www.slideshare.net/andbed/clean-architecture

https://yongjhih.gitbooks.io/feed/content/clean_architecture.html

Flux-Architecture

参考资料:

http://www.inferjay.com/blog/2015/08/18/flux-architecture-on-android/

Android-ZBLibrary

参考资料:

https://www.oschina.net/p/Android-ZBLibrary