MVC
简介
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式
- M model 模型 模型model用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法,会有一个或多个视图监听此模型。一旦模型的数据发生变化,模型将通知有关的视图。
- V view 视图 视图view是屏幕上的表示,描绘的是model的当前状态。当模型的数据发生变化,视图相应地得到刷新自己的机会。
- C controller 控制器 控制器controller定义用户界面对用户输入的响应方式,起到不同层面间的组织作用,用于控制应用程序的流程,它处理用户的行为和数据model上的改变。
两种模式
1.互动模式
1)view传送指令到controller。
2)controller完成业务逻辑后,要求model改变状态。
3)model将新的数据发送到view,用户得到反馈
用户也可以直接向controller发送指令,比如:在浏览器上直接输入网址。
2.实例
1)用户可以向view发送指令,view直接要求model改变状态。
2)用户直接向Controller发送指令,再由controller发送给View。
3)controller非常薄,只起到路由的作用,view层非常厚,业务逻辑都部署在view。
优点
低耦合,高重用,生命周期成本低,部署快,可维护性高,有利于软件工程化管理
1.低耦合
视图层,业务层,模型层分离,运用MVC的应用程序的三个部分是相互独立的,改变其中一个不会影响到其他两个。
2.高重用
很多数据可能用HTML来表示,但是也有可能用安卓来表示,而这些表示所需要的是改变视图层的实现方式,而控制层和模型层无需做任何改变。
3.生命周期成本低
MVC使开发和维护用户接口的技术含量降低
4.部署快
使用MVC模式使开发时间得到相当大的缩减,它使程后端序员集中精力于业务逻辑,前端程序员集中精力于表现形式上。
5.可维护性高
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
6.有利软件工程化管理
由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型经行处理,然后选择视图将处理结果显示给用户。比如:pc端视图与手机端视图是两种完全不同的布局,这里控制器就能选择合适的视图返回给用户。
缺点
没有明确的定义,不适合小型,中等规模的应用程序,增加系统结构和实现的复杂性,视图与控制器间过于紧密的连接,视图对模型数据的低效率访问,一般高级的界面工具或构造器不支持模式
1.没有明确的定义
完全理解mvc并不是很容易,使用mvc需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格分离,这样也给调试应用程序带来一定的困难。每个构建在使用之前都需要经过彻底的测试。
2.不适合小型,中等规模的应用程序
花费大量时间将mvc应用到规模并不是很大的应用程序通常得不偿失。
3.增加系统结构和实现的复杂性
对于简单的界面,严格遵循mvc,使模型,视图和控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
4.视图与控制器间的过于紧密的连接
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
5.视图对模型数据的低效率访问
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
6、一般高级的界面工具或构造器不支持模式
改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,会造成MVC使用的困难。
MPV
简介
MVP模式是MVC的一个演化版本,MVP能够有效的降低View的复杂性,避免业务逻辑被塞进View中,有效降低View层的厚度,MVP模式会解除View与Model的耦合,同时又带来了良好的可扩展性,可测试性,保证了系统的整洁性
- M Model 模型负责数据的检索,持久化等操作。
- V View 视图 负责UI的绘制和用户的交互。
- P Presenter 交互器 作为Model和View的中间协调部分,负责两者之间的业务逻辑处理。
MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向
1) 各部分之间的通信,都是双向的。
2) View 与 Model 不发生联系,都通过 Presenter 传递。
3) View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。
优点
1.view和model完全隔离
2.presenter与view的具体实现技术无关
3.可以对view层进行模拟测试(model与view层松耦合)
缺点
由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。
MVVM
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。
唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。