一直在敲代码,最近看了Android架构方面的知识,做下总结记录。主要有MVC、MVP、MVVP。
MVX(MVC 、MVP 、MVVM等的统称)
根据M与V的数据传递流程不同。
MVC ---》MVP--》MVVM
MVC(模型-视图-控制器、Model View Controller)
运行机制:如下图。箭头方向表示数据交互传递的方向。
优点:
- 把业务逻辑全部分离到Controller中,模块化程度高。当业务逻辑变更的时候,不需要变更View和Model,只需要更换Controller就行了。
- 须手动或通过观察者模式进行多视图更新。
缺点:
- Controller测试困难。
- View无法组件化,复用性较差。View是强依赖特定的Model的,如果需要把这个View抽出来作为一个另外一个应用程序可复用的组件就困难了。因为不同程序的的Model是不一样的
使用场景:适用于较小,功能较少,业务逻辑较少的项目。
参考资料:
http://blog.csdn.net/honeybaby201314/article/details/50782571#comments
MVP( 模型-视图-表现类 、Model-View-Presenter)
运行机制:如下图。
优点:
- 便于测试。Presenter对View是通过接口进行,在对Presenter进行不依赖UI环境的单元测试的时候。可以通过Mock一个 View对象,这个对象只需要实现了View的接口即可,单元测试的时候就可以完整的测试Presenter业务逻 辑的正确性。
- View可以进行组件化。在MVP当中,View不依赖Model。这样就可以让View从特定的业务场景中脱离出来,可以说View可以做到对业务逻辑完全无知。它只需要提供一系列接口提供给上层操作。
- view高度复用。
- 解耦。
缺点:
- 维护比较困难。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)
运行机制:如下图。
优点:
- 提高可维护性。解决了MVP大量的手动View和Model同步的问题,提供双向绑定机制。提高了代码的可维护性。
- 简化测试。因为同步逻辑是交由Binder做的,View跟着Model同时变更,所以只需要保证Model的正确性,View就正确。大大减少了对View同步更新的测试。
- ViewModle易于单元测试。
缺点:
- 过于简单的图形界面不适用。
- 对于大型的图形应用程序,视图状态较多,ViewModel的构建和维护的成本都会比较高。
- 数据绑定的声明是指令式地写在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