@linux1s1s
2016-04-26T11:37:08.000000Z
字数 1407
阅读 2742
Android_Architecture
2016-04
M:Model —— 模型:数据存取、处理
V:View —— 视图:UI界面显示、交互
C: Controller——控制器:逻辑控制、处理
P: Presenter——引荐者:逻辑处理、视图更新
VM:ViewModel——视图模型:逻辑处理、双向绑定
先搞清楚一个顺序,是GUI应用程序的出现导致了MVC的产生。GUI应用程序提供给用户可视化的操作界面,这个界面提供给用户数据和信息。在PC上用户与界面的交互主要依赖(键盘,鼠标等。这些操作会执行一些应用逻辑,应用逻辑(application logic)可能会触发一定的业务逻辑(business logic)使应用程序数据的发生变更,数据的变更自然需要用户界面的同步变更以提供最准确的信息。在开发这类应用程序时,为更好的管理应用程序的复杂性,基于职责分离(Speration of Duties)的思想都会对应用程序进行分层。在开发GUI应用程序的时候,会把管理用户界面的层次称为View,应用程序的数据为Model(注意这里的Model指的是Domain Model,这个应用程序对需要解决的问题的数据抽象,不包含应用的状态,可以简单理解为对象)。Model提供数据操作的接口,执行相应的业务逻辑。
有了View和Model的分层,那么问题就来了:View如何同步Model的变更,View和Model之间如何粘合在一起。(所谓的MVX中的X都可以归纳为对这个问题不同的处理方式)(引自:戴嘉华)
上面这句话翻译为图形表示如下
MVC框架
- View 传送指令到 Controller
- Controller 完成业务逻辑后,要求 Model 改变状态
- Model 将新的数据发送到 View,用户得到反馈
MVP框架
- 各部分之间的通信,都是双向的。
- View 与 Model 不发生联系,都通过 Presenter 传递。
- View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。
MVVM框架
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。
唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。Angular 和 Ember 都采用这种模式。
接下来会分述以上三种框架。
MVX Android设计架构浅析-MVC
MVX Android设计架构浅析-MVP
MVX Android设计架构浅析-MVVM