前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第五十三期:彻底理解MVC,MVP和MVVM

第五十三期:彻底理解MVC,MVP和MVVM

作者头像
terrence386
发布2022-07-15 10:29:41
7140
发布2022-07-15 10:29:41
举报
文章被收录于专栏:JavaScript高级程序设计

Vue和React的核心都有虚拟Dom,虚拟Dom的作用除了能够减少Dom操作,提升性能之外,其实还可以用来做多端渲染,这也算是近年来各种跨平台框架出现的一个原因吧。

MVC

MVC是软件设计中的一种模式,通常被用来扩展用户界面,数据以及业务逻辑。它强调业务逻辑和视图的分离。这种业务逻辑和视图的分离可以提供一种很好的开发体验。

其他的设计模式其实是基于MVC的扩展,比如MVVM,MVP,以及MVM(model-vuiew-whatever)。

  • Modal 主要负责处理数据和业务逻辑
  • View 主要负责处理页面布局和展示
  • Controller 负责处理并更新modal中的逻辑,有时候也会直接处理View发送过来的数据

在web开发中,我们可以将HTML/css构成的界面理解为View,把js的操作理解为Controller,把本地缓存的数据理解为Modal,比如我们存在本地数据库IndexeDB中的数据。

web开发的早期,MVC主要用于服务端,但是现在,随着各种框架的兴起,这种模式在前端领域也越来越流行。

MVC存在的问题

在MVC中,View是可以直接访问Modal的。所以,View里面会包含Modal的信息,有可能还会包含一些业务逻辑。在MVC中,关注的更多的是Modal的不变性,而对于同时有多个对Modal的不同展示以View。

在MVC中,Modal不依赖于View,但是View是依赖于Modal的。一些业务在View里面实现了,要更改View也将是一件困难的事情。尤其是多个视图互相引用同一个Modal中的数据时。这种情况将变得更加复杂。

MVP

MVP(Modal-View-Presenter),Modal提供数据,View负责展示,Presenter负责逻辑的处理。

它和MVC的一个重要区别在于:View并不直接使用Modal,他们之间通过Presenter进行通信,所有的交互发生在Presenter内部。

而在MVC中,View会直接从Modal中读取数据而不是Controller。

在MVP中,Presenter完全将Modal和View进行了分离,主要的逻辑在Presenter中实现。并且,Presenter和具体的View没有具体的联系,而是通过定义好的接口实现,这样一来,当View发生变化的时候就可以保持Presenter的不变性,一旦Presenter不变,即可做到代码的重用。

MVVM

MVVM是基于MVC和MVP的进阶版。

MVVM的模式是基于数据绑定。View绑定到ViewModal,然后当View发生变化时通知ViewModal,ViewModal则和Modal进行通信,告诉Modal去更新UI。

这样的结构其实也是一种分层的设计,只是在实现的过程当中,ViewModal的实现起来相当复杂。比如Vue的双向绑定。

这样的目的还是和上面的两种模式一样:都是为了分离视图和模型。YOU点有以下几点:

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

但是,使用MVVM开发的组件一般情况下不涉及数据持久化的内容,如果需要数据持久化,则需要去考虑一些具体的实现方案。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaScript高级程序设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MVC
  • MVC存在的问题
  • MVP
  • MVVM
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档