写在前面的几句话
一个好的软件架构可以降低软件耦合度、提高可复用性、增强软件稳健性、提高代码的阅读美感等等。那么我们接下来就介绍下Android平台下常用的MVC、 MVP和MVVM软件架构。
MVC设计模式
即Model View Controller,MVC设计模式将应用程序分为三个主要方面:即Model,View和Controller。
Model
模型表示一组描述业务逻辑的类,即业务模型以及数据访问操作,即数据模型。它还定义了数据的业务规则,比如如何更改和操作数据。
View
视图表示UI组件。它只负责显示从控制器接收的数据。也就是将模型转换为UI。
Controller
控制器负责处理传入的请求。它通过View从用户接收输入,然后在Model的帮助下处理用户的数据,并将结果传递回View。通常,它充当View和模型之间的协调器。
总的来说就是通过controller的控制去操作model层的数据,并且返回给view层展示,当用户出发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上,这就是MVC的工作原理。
MVP设计模式
即Model View Presenter,这种模式类似于MVC模式,其中Controller被Presenter取代。这种设计模式将应用程序分为三层:Model、View、Presenter。
Model
模型表示一组描述业务逻辑和数据的类。它还定义了数据的业务规则,比如如何更改和操作数据。
View
视图表示UI组件。它只负责显示从Presenter接收的数据。也就是将模型转换为UI。
Presenter
Presenter负责代表视图处理所有UI事件。通过View从用户接收输入,然后在Model的帮助下处理用户的数据并将结果传递回View。与MVC不同,View和Presenter彼此完全解耦,并通过接口相互通信。
MVP模式的特点
- 用户与视图交互。
- View和Presenter之间存在一对一的关系。
- View具有对Presenter的引用,但是View没有引用Model。
- 提供View和Presenter之间的双向通信。
MVVM
即Model View ViewModel。此模式支持视图和视图模型之间的双向数据绑定。这使得能够在视图模型的状态下将更改自动传递到视图。通常,MVVM使用观察者模式来通知View中的更改。
Model
Model表示一组描述业务逻辑和数据的类。它还定义了数据的业务规则,比如如何更改和操作数据。
View
View表示UI组件。它只负责显示从控制器接收的数据,将模型转换为UI。
ViewModel
ViewModel负责公开方法,命令和其他属性,以帮助维护视图的状态,操作模型作为视图上的操作的结果,并触发视图本身中的事件。
MVVM模式的特点
- 用户与视图交互。
- View和ViewModel之间存在多对一的关系意味着许多View可以映射到一个ViewModel。
- View具有对ViewModel的引用,但ViewModel没有有关视图的信息。
- 支持View和ViewModel之间的双向数据绑定。
对比结论与分析
通过代码的对比,明显可以发现Mvp模式下的代码量相对来说确实增加了很多,但是逻辑相对的更加清晰,所以我觉得Mvp模式不是很适合小型的项目,小型项目整一堆类出来确实不是很好的事情,但是如果是一个较大型的项目还是可以选用这种架构来做开发,毕竟逻辑清晰,维护起来也比较方便。
而MVVM的架构我觉得是Android往后发展的趋势,毕竟谷歌都推出了Datebinding,而使用Datebinding也就可以不用去使用bufferknife了,而且绑定的这种机制也确实带来了Model,View与ViewModel的分离,从逻辑上看也确实清晰了很多,问题是暂时只支持单向绑定,这个也要等谷歌后面的更新了,而且代码的阅读性会下降很多,所以呢这个比较时候小型的极客项目,暂时不适合大型的项目。