MVC/MVP/MVVM

转载请标明出处:https://blog.csdn.net/u013254166/article/details/79523214
本文出自: rhino博客 

一、MVC

       MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

       

  • 模型(Model):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • 视图(View):是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
  • 控制器(Controller):是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

优点:

  1. 耦合性低
  2. 重用性高
  3. 生命周期成本低
  4. 部署快
  5. 可维护性高
  6. 有利软件工程化管理

缺点:

  1. 没有明确的定义
  2. 不适合小型,中等规模的应用程序
  3. 增加系统结构和实现的复杂性
  4. 视图与控制器间的过于紧密的连接
  5. 视图对模型数据的低效率访问
  6. 一般高级的界面工具或构造器不支持模式

注意:MVC所有通信都是单向的。

二、MVP

       MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。

       

  • 模型(Model):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • 视图(View):是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
  • 控制器(Presenter):Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。而且,Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,即重用! 不仅如此,我们还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试--而不需要使用自动化的测试工具。

优点:

  1. 模型与视图完全分离,我们可以修改视图而不影响模型
  2. 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部
  3. 我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
  4. 如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

缺点:

  1. 由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。还有一点需要明白,如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。比如说,原本用来呈现Html的Presenter现在也需要用于呈现Pdf了,那么视图很有可能也需要变更。

注意:MVP所有通信都是双向的。

三、MVVM

       MVVM是Model-View-ViewModel的简写。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。

       

  • 模型(Model):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • 视图(View):是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
  • 控制器(ViewModel):包含所有由UI特定的接口和属性,并由一个 ViewModel 的视图的绑定属性,并可获得二者之间的松散耦合,所以需要在ViewModel 直接更新视图中编写相应代码。

优点:

  1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
  2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
  3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码。
  4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。



参考:

http://blog.csdn.net/hudan2714/article/details/50990359

https://baike.baidu.com/item/MVC%E6%A1%86%E6%9E%B6/9241230?fr=aladdin&fromid=85990&fromtitle=MVC

https://baike.baidu.com/item/MVP%E6%A8%A1%E5%BC%8F/10961746

https://baike.baidu.com/item/MVVM/96310?fr=aladdin



猜你喜欢

转载自blog.csdn.net/u013254166/article/details/79523214