MVC,MVP和MVVM的区别

后端已经进入了后REST时代,RESTful将MVC和MVP和MVVM从后端服务器端压缩到了前端,从而实现了前后端分离,前端目前以React.js Vue.js为主,ReactJS是通过事件源这种函数式实现模型和视图的绑定更新(Redux与Flux介绍),因此可以说,MVC, MVP和MVVM实则是过去落后的技术名词。但是初学者可能需要了解这些之间区别,特别找到一篇文章翻译如下:

MVC,MVP和MVVM是指导程序员创建解耦解决方案的一些常见模式。MVC,MVP和MVVM共有的软件行为是:

  • 数据层/业务逻辑(模型):这是将业务逻辑应用于应用程序数据的行为。域模型通常表示模型,其中对象用于模拟现实世界实体。
  • 表示层/ UI(视图):View负责应用程序的可视化表示。此行为向用户显示模型信息。
  • 应用程序逻辑(控制器,表示或视图模型):此行为包含实现模型和视图之间交互的逻辑。

MVC模式


  • MVC由三层Model,View和Controller组成。
  • MVC是一种复合模式
  • 它使用前端控制器模式,通过单个控制器处理Web应用程序请求。因此控制器是MVC中动作入口点。
  • 它不使用视图状态或基于服务器的表单。这使得MVC框架非常适合希望完全控制应用程序行为的开发人员。
  • 它为测试驱动开发(TDD)提供了更好的支持。
  • 它适用于大型开发人员团队支持的Web应用程序以及需要对应用程序行为进行高度控制的Web设计人员
    客户端库:Backbone.js,knockback.js,Spine.js,angular.js。
  • 服务器端库:ASP。NET MVC, Spring MVC, Ruby-on-Rails

(banq注:MVC模式中控制器是整个流程核心,用户看到的视图,但是想看到哪个视图,需要通过控制器选择,哪个视图对应哪个模型也是在控制器内部完成。)


MVP模式


  • MVP由三层Model,View和Presenter组成。
  • 在MVP中,视图和模型更松散地耦合,提供更清晰的关注点分离。
  • MVP,View负责将用户输入委派给Presenter。
  • MVP,Presenter和View应该具有1-1关系,每个View都通过界面引用其Presenter。
  • MVP,view直接通过数据绑定绑定到Model。
  • 在MVP中,单元测试更容易,因为View通过易于模拟的界面了解Presenter。
  • 客户端库:Riot.js,GWT
  • 服务器端库:经典ASP. NET,JSP Servlets。

(banq注:MVP与MVC的区别是用Presenter替代了控制器Controller,这个模式在.NET中比较普及,JSP Servlet其实是用于MVC实现,Struts等背后都是基于JSP/Servlet的MVC框架,MVP中视图能动性更强些,不像MVC中M和V都是被动的,靠控制器推动。)


MVVM​​​​​​​


  • MVVM模式是处理WPF和Silverlight应用程序此类问题的最佳解决方案之一。
  • 当您为WPF使用MVVM模式时,Silverlight视图将不具有在UI代码中如此常见的典型事件处理程序。
  • MVVM在UI和应用程序逻辑之间提供了清晰的分离。
  • 客户端库:Knockout.js,Kendo(MVVM)
  • 服务器端库:WPF(桌面)或Silverlight,Windows Phone应用程序(XAML),Adobe Flex

MVVM模式包括三个关键部分:

  1. 模型(业务规则,数据访问,模型类)
  2. 查看(用户界面(XAML))
  3. ViewModel(视图和模型之间的代理或中间人)

(banq注:MVVM使用ViewModel视图模型替代控制器和Presenter,ViewModel简称VM,别以为又多了一个组件,还是三个组件,主要是.NET中用得比较多,这种模式类似前端双向或单向绑定,如果说,MVP中Presenter还要兼顾视图和模型,那么在MVVM中ViewModel直接和Model对应绑定;MVC和MVP中动作和数据都是分离的,数据在视图和模型中,控制器或Presenter通过动作调用将两者对应混合起来;但是在MVVM中,动作通过绑定融合了数据之中,通过事件或观察者模式实现调用了。ReatJS等前端框架在这个基础上发展其Flux等Reactive响应式框架。)

对该模式的批评来自MVVM创建者John Gossman本人,他指出实现MVVM的开销对于简单的UI操作来说是“过度杀伤”;对于更大的应用程序,概括提炼一个ViewModel变得很困难。此外,他说明在非常大的应用程序中的数据绑定可能导致相当大的内存消耗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVCMVPMVVM是三种常用的软件架构模式,它们的出现是为了更好地解耦、提高代码的可复用性、可维护性和可扩展性。下面分别介绍它们的区别: 1. MVC模式 MVC全称Model-View-Controller,即模型-视图-控制器。它将应用程序分成三个部分,分别是模型、视图和控制器。其中,模型表示应用程序的核心业务逻辑、数据和状态,视图则是用户所见的界面,控制器则是连接模型和视图的桥梁。 MVC模式的核心思想是分层,以便于实现代码的重用和维护。它的优点在于,模型和视图是分离的,模型与视图之间通过控制器来进行交互。这样的设计使得模型和视图可以独立地进行修改,同时也方便了代码的重用和维护。但它的缺点是,控制器往往会变得十分臃肿,因为它需要处理大量的用户输入和业务逻辑。同时,视图和控制器之间的通讯往往是双向的,这样会增加视图和控制器之间的耦合度,使得代码难以维护。 2. MVP模式 MVP全称Model-View-Presenter,即模型-视图-控制器。它是MVC的变种,主要区别在于它将控制器改为了Presenter,同时将控制器的功能分离到了Presenter中。这样,视图和模型之间的交互将通过Presenter进行,而视图和Presenter之间的通讯则是单向的。 MVP模式的核心思想是将视图和模型完全隔离开来,使得视图和模型之间的耦合度大大降低。它的优点在于,Presenter作为控制器的替代,它的职责也更加明确,使得代码变得更加清晰和易于维护。但它的缺点是,Presenter的数量往往会变得很多,因为每一个视图都需要一个Presenter来进行交互。同时,Presenter和视图之间的通讯是单向的,这样会导致Presenter难以处理视图之间的交互。 3. MVVM模式 MVVM全称Model-View-ViewModel,即模型-视图-视图模型。它是一种新的架构模式,它将控制器改为了ViewModel,同时将模型和视图之间的通讯改为了单向的。在MVVM中,ViewModel充当了控制器的角色,它负责将模型转化为视图模型,同时也将视图模型转化为模型。这样,视图和ViewModel之间的通讯是双向的,而视图和模型之间的通讯是单向的。 MVVM模式的核心思想是将视图和模型完全隔离开来,使得视图和模型之间的耦合度大大降低。它的优点在于,ViewModel的引入,使得视图的逻辑变得更加简单、清晰,并且方便了测试。但它的缺点是,MVVM的实现往往需要使用一些高级的技术,如数据绑定、命令绑定等,这样增加了开发的难度。同时,视图模型往往会变得很大,因为它需要处理大量的业务逻辑和用户输入。 综上所述,MVCMVPMVVM都是常用的软件架构模式,它们各自具有不同的特点和适用场景。在实际开发中,我们应根据具体的应用需求来选择合适的架构模式,以便更好地实现代码的可复用性、可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值