Android关于MVC / MVP / MVVM / Andr
2018-10-25 本文已影响64人
supylc
架构是什么
- 架构是又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计
- 架构模式是前辈们几十年留下的经验之谈,我们应心存敬畏
- 深刻理解了架构模式,并做一些优化,对应用带来实在的或者潜在的实惠,是我们的基本目标
- 利用架构的思想,设计出特别适合本应用场景的架构
一个开发效率高,扩展性强,维护成本低的架构,却又不像MVC/MVP,又有一点思想的相似性,也许这才是最好的形态,武术的最高境界,就是无招。 - 没有一个人能准确描述MVC是具体形态,10个人有10种表达。
因为架构模式是一种开放的设计思想,没有具体形态,开发者应该有适合自己的定制架构模式。
MVC/MVP/MVVM
MVC/MVP/MVVM,是目前比较流行的三种移动开发架构,思想形式不同,但目的几乎一样,就是如何分离模型层和视图层,如何组织好软件架构,如何做到更快的开发,更好的维护。
MVC
MVC架构,就是用户触发UI事件,通过controller,请求Model层,并映射model响应到View层刷新或通知View刷新。
在Android里面,
- controller层,作为事件(或请求)入口,事件源可以是view控件的点击事件,也可以是代码触发打开一个activity或service。controller功能就是接收事件,并转发给model做事件响应。Controller依赖Model。
- model层,事件响应就是请求Model层的读写服务,甚至是一系列组件交互,最后把结果通知到View层。
- view层,负责触发事件,并接收model的刷新通知。包含打开一个新的Activity,或者View/VIewGroup的UI刷新。View依赖Model。
如下图,
MVC架构图.png
MVP
MVP是一种主持架构模式,view层和model层可以独立并行开发,并通过中间人Presenter来请求模型层和刷新视图层,在这里,视图和模型是完全分离。
在Android里面,
- Presenter层,作为事件(或请求)入口,事件源可以是view控件的点击事件,也可以是代码触发打开一个activity或service。Presenter接收事件,并转发给model做事件响应。接收到响应结果,通过定义的View接口通知到View刷新。Presenter依赖Model,Presenter依赖自定义View接口。
- model层,请求Model层的读写服务,甚至是一系列组件交互,最后Presenter接收响应结果。
-
view层,负责触发事件,和刷新视图。包含打开一个新的Activity,或者View/VIewGroup的UI刷新。
与MVC最大的不同,是View并没有依赖Model。
如下图,
MVP架构图.png
MVVM
MVVM,其实是MVP的改进版,通过数据绑定的方式,直接定义ViewModel的抽象UI行为来跟View绑定。只要数据改变,UI就会改变。
在Android里面,
- ViewModel层,ViewModel接收事件,并转发给model做事件响应。接收到响应结果,通知View刷新。ViewModel依赖View,ViewModel依赖Model。
- model层,请求Model层的读写服务,甚至是一系列组件交互。
-
view层,负责触发事件,和刷新视图。包含打开一个新的Activity,或者View/VIewGroup的UI刷新。
与MVP最大的不同,是跟View更紧密,更高效,缺点是不够灵活,比如一个复杂的View视图,有大量的刷新UI操作,就需要定义好多操作。
如下图,
MVVMPattern.png
Android Architecture Components
Android Architecture,是一种基于官方集成的,能自动管理架构生命周期,利用观察者绑定视图和数据的架构。它是一套完整的解决方案,模型跟视图完全分离。我们只关心livedata和视图的同步即可。
如下图,
final-architecture.png
viewmodel-replace-loader.png
附言
以上为个人的经验总结,不当之处欢迎讨论,并持续优化。
微信联系方式: superroye