MVC、MVP及MVVM的比较

本文详细介绍了MVC、MVP和MVVM三种软件设计模式,并对比了各自的优缺点。MVC通过分离模型、视图和控制器提高了代码复用性和开发效率;MVP进一步实现了模型与视图的完全分离,简化了测试流程;MVVM利用数据绑定技术增强了视图与模型的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    首先,我要先给大家介绍一下这三种模式:

           MVC模式:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。

           MVP模式:简称:MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

          MVVM模式:MVVM模式不但能够实现UI设计的分离,而且能充分发挥RIA技术中的数据绑定的技术和特点,提高软件的复用性。

   下面,我再说一下这三种模式的好处:

          MVC模式:

                     1、一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地刷新自己。
                     2、模型可复用。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。
                     3、提高开发效率。在开发界面显示部分时,你仅仅需要考虑的是如何布局一个好的用户界面;开发模型时,你仅仅要考虑的是业务逻辑数据维护,这样能使开发者专注于某一方面的开发,提高开发效率。
  

          MVP模式:

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

         MVVM模式:

                     1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
                     2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
                     3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
                     4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。
下面我们说一下这三种模式的缺点:
         MVP模式:
                     Presenter中除了应用逻辑以外,还有大量的View->Model,Model->View的手动同步逻辑,造成Presenter比较笨重,维护起来会比较困难。
         MVC模式:
                     Controller测试困难。因为视图同步操作是由View自己执行,而View只能在有UI的环境下运行。在没有UI环境下对Controller进行单元测试的时候,应用逻辑正确是无法验证的:Model更新的时候,无法对View的更新操作进行断言。
View无法组件化。View是强依赖特点的Model的,如果需要把这个View抽出来作为一个另外一个应用程序可复用的组件就困难了,因为不同程序的Domain Model是不一样的。
         MVVM模式:
                     过于简单的图形界面不适用,或说牛刀杀鸡。对于大型的图形应用程序,视图状态较多,ViewModel的构建和维护的成本都会比较高。 数据绑定的声明是指令式地写在View的模板当中的,这些内容是没办法去打断点debug的。



可以看到,从MVC->MVP->MVVM,就像一个打怪升级的过程。后者解决了前者遗留的问题,把前者的缺点优化成了优点。同样的Demo功能,代码从最开始的一堆文件,优化成了最后只需要20几行代码就完成。MV*模式之间的区分还是蛮清晰的,希望可以给对这些模式理解比较模糊的同学带来一些参考和思路。

谢谢大家的支持^v^


       


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值