MVC (Model-View-Controller):顾名思义,M是指逻辑模型,V是指视图模型,C则是控制器。一个逻辑模型我们可以才用多种视图模型,例如进度条显示,我们可以采用圆环、直线、容器式的试图显示,当然,一种视图模型也可以对于多种逻辑模型。
MVC的作用:
1、将M层和V层的实现代码分离,从而使同一个程序可以在同一View下,有不同的表现形式;
2、C层则是确保M层和V层的同步,一旦M层有改变,那么C层应该控制V去同步更新;
3、MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。
4、使用MVC应用程序被分成三个核心部件:模型、视图、控制器,它们各自处理自己的任务。
MVC的好处:
1、MVC的价值,在于各模块的松耦合、复用,提高开发效率,在Android中,三个模块分离想对明显,界面框架和ContentProvider模块得到充分复用;
2、从用户的角度出发,用户可以根据自己的需求,选择自己合适的浏览数据的方式;
3、从开发者的角度,MVC把应用程序的逻辑层与界面是完全分开的,故开发者一般不需要管UI,主要把精力放在逻辑层上。
举个例子,在Android中:
1、视图层(View):一般在layout下,采用XML文件进行界面的描述,可以通过R.layout.***引入。当然,视图的显示绝不仅仅这些,还可以通过HTML5+CSS3+JS,利用Android自带的WebView来显示,另外,诸如PhoneGap的跨平台开发框架,也是针对不同平台的WebView做了扩展和封装,使WebView这个组件变成可访问设备本地API,所以本质上还是用WebView;
2、控制层(Controller):控制器起到不同层面间的组织作用,用于控制应用程序的流程,处理事件并作出响应。Android的控制层的重任通常落在了众多的Acitvity的肩上,这句话的另一层含义则是尽量不要在Acitivity中写一些复杂逻辑的代码,这部分复杂的业务逻辑,交由Model层去处理,另外,耗时的操作尽量在子线程中执行,使得主线程能快速处理UI事件和Broadcast消息,UI需要更新通过Handler、Messenger等方式通知主线程更新。众所周知,Android主线程阻塞时间不能超过5秒,否则将会发生ANR(Application Not Responding)异常。
3、模型层(Model):对数据库的操作、网络请求、格式转换、文件下载、大数据处理等的耗时操作都在Model里面处理。
其实,MVC并没有严格的定义,但是Android中,MVC三个层分离明显,界面框架和ContentProvider模块得到充分复用,开发者并不需要在这方面话太多的心思去思考。
MVP(Model-View-Presenter):和MVC类似,Presenter就是Model和View交互的中间纽带,负责处理与用户交互的逻辑。
android-MVP模式:
View不直接与Model交互,而是通过与Presenter交互来与Model间接交互。
Presenter与View的交互是通过接口来进行的。
通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。
android-MVC模式:
View可以与Model直接交互。
Controller是基于行为的,并且可以被多个View共享,并且决定显示哪个View。