mvc_mvp和mvvm

本文介绍了MVC、MVP和MVVM三种设计模式,探讨了它们在软件开发中的应用及其优缺点。MVC在触屏设备上存在耦合问题,MVP通过引入Presenter实现解耦但增加了代码复杂性,而MVVM通过数据绑定和命令绑定解决了这一问题,降低了手动绑定的繁琐。MVVM模式在现代Web界面中广泛应用,因其自动代码生成和更好的视图与模型隔离而被认为更优。

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

理解MVC、MVP和 MVVM

一、简介

  1. 这是一个逐渐演化的过程。最开始是MVC,后来发展到MVP,最后是MVVM。
  2. https://gitee.com/zlgopen/awtk-mvvm/blob/master/docs/8.intro.md 参考了这里的介绍。

二、MVC

  1. MVC 模式是 (Model-View-Ctrl) 。

    1. Model 其实指的是业务流程。不仅仅是数据。用小霸王游戏机来理解的话,这个Model就是我们插的卡。

    2. View 就是显示。用小霸王游戏机来理解的话,View就是显示器。

    3. Ctrl 就是输入。用小霸王游戏机来理解,就是键盘,鼠标,手柄。

    4. MVC模式的图示:

      在这里插入图片描述

    5. 其实在小霸王游戏机中的MVC可能不是这样的。而是:

      在这里插入图片描述

    6. 对于触屏手机出现之后,MVC才变成这样。

      在这里插入图片描述

    7. 对于触屏手机而言,ctrl和view是耦合在一起的,所以图示应该变成这样:

      在这里插入图片描述

    8. 这就是个问题,因为MVC似乎变成了一个耦合系统了。很容易让软件不好扩展。

三、MVP

  1. 因为MVC 已经成了一个耦合系统了。MVP运用而生。

    在这里插入图片描述

  2. 我理解的就是在已经耦合在一起的View/Ctrl 和 Model 中间加一层抽象层。不要让视图直接和业务逻辑耦合起来。

  3. MVP模式是解耦了视图和模型。但是有个问题。每个视图中的控件操作,要想作用于Model,都需要在Presenter绑定。隔离的方法就是使用函数指针嘛。那你就要加很多的函数指针,并且在初始化的时候赋值。

  4. 这在写代码的时候,会十分痛苦,因为要写很多对业务逻辑没有意义的代码,只是为了解耦View-Model。

四、MVVM

  1. MVVM 模式,是键 Presenter 换成了 ViewModel 。如图:

    在这里插入图片描述

  2. MVP模式,Presenter 需要绑定很多的回调函数去访问和操作视图。可以说MVP的思想是没有问题的,但是写代码的时候会很痛苦。

  3. MVVM 模式,ViewModel会通过固定的 数据绑定和命令绑定来和视图交互。比如一个点击事件 on_click=function_click。这是一个事件绑定。如果在视图中加上这个配置,ViewModel会直接调用 Model 中 function_click 对应的函数。

  4. 那这不是还是要绑定回调函数吗?是的,只不过ViewModel是自动生成的代码,不是人手动写的。比如,我们可以根据自定义的规则,把on_click的function_click函数绑定到我们已经在model中实现的函数。

  5. 正因为如此,我认为MVVM才会优于MVC/MVP。

五、总结

  1. MVC在view和Ctrl结合之后,就变成一个耦合系统了。
  2. MVVM的优势在于,使用ViewModel不仅仅隔离了View和Model,还可以自动生成代码,不用人手动去一个个绑定。
  3. web 界面采用的就是MVVM模式。果然,web是目前最好的UI。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值