一次搞明白什么是MVC、MVP、MVVM?
发布日期:2021-06-30 16:14:22 浏览次数:2 分类:技术文章

本文共 2216 字,大约阅读时间需要 7 分钟。

1.前言

三个框架的共同目的:为了将业务和视图的实现代码分离,从而使同一个程序可以使用不同的表现形式。

MVC = Model-View-Controller

MVP = Model-View-Presenter

MVVM = Model-View-ViewModel

都有Model和View层Model 为模型层,主要管理业务模型的数据和行为;View 为展示层,其职责就是管理用户界面。三个架构模式目的都是为了解耦 Model 和 View,主要不同点就在于三者实现解耦的方案不同。

2.MVC

MVC = Model-View-Controller

 Model = 数据 + 业务逻辑。因此,处理业务逻辑属于 Model 的职责,而非 Controller。

View 是 MVC 里最好理解的,它会接收用户的交互请求并展示数据信息给用户。一个 View 展示的数据可能只是一个 Model 对象的部分数据,也可能是一个 Model 对象的全部数据,甚至可能是多个 Model 对象数据的组合。在 MVC 里,View 被设计为可嵌套的,使用了组合(Composite)模式来实现。比如,列表视图(ListView)或表格视图(TableView)由每个 Item 组成,每个 Item 又可以由图片、文本、按钮等组成。View 是倾向于可复用的,因此,在实际应用中,倾向于将 View 开发成相对通用的组件。

Controller 层主要担任 Model 与 View 之间的桥梁,用于控制程序的流程。Controller 负责确保 View 可以访问到需要显示的 Model 对象数据,并充当 View 了解 Model 更改的渠道。View 接收到用户的交互请求之后,会将请求转发给 Controller,Controller 解析用户的请求之后,就会交给对应的 Model 去处理。因此,理论上,Controller 应该是很轻的。

ä¼ ç»MVC

这就是 MVC 最初版本的通信机制,自 1979 年提出之后就被广泛应用在 GUI 程序中。请注意,那时候还没有 HTTP。后来随着微软 ASP.NET MVC Framework 的出现,MVC 也开始被广泛应用于 Web 程序。

 

3.变种MVC

由于 View 依赖了 Model,实际上减低了 View 的可复用性。那么,如果能将 View 和 Model 彻底解耦,那就可以提高 View 的可复用性了。因此,出现了下面这种变种 MVC:

apple_mvc

  • 彻底结构view层和model层,view层可以复用
  • Controller层职责变得很重

4.MVP

Presenter 其实就是 Controller,只是为了与 MVC 区别开来,所以才称为 Presenter

now_mvp

在 MVP 里,三件套各自的职责和依赖关系和变种 MVC 里的职责和依赖关系其实是一样的,但不同的是,MVP 之间的交互主要是通过接口实现的,Model、View、Presenter 都有各自的接口,定义各自的行为方法。针对接口编程,自然就能减低耦合,提高可复用性,以及容易进行单元测试。

接着,我们来总结下 MVP 有哪些优缺点。先有看看有哪些优点呢:

  1. 我们知道,MVC 模式在 App 实际应用中,Activity 和 UIViewController 既同时担任 Controller 又担任部分 View 的职责,职责不清,导致 Activity 和 UIViewController 容易变得越来越臃肿。而应用 MVP 模式,直接将 Activity 和 UIViewController 划分到 View 层了,职责明确了,自然也避免了 Activity 和 UIViewController 臃肿的问题。
  2. MVP 之间的交互通过接口来进行的,那就便于进行单元测试了,维护性和扩展性也提高了。
  3. M 和 V 之间彻底分离了,降低了耦合性,修改 V 层也不会影响 M 层。

不过,相应地,相比 MVC 也引入了一些弊端:

  1. 由于增加了很多接口的定义,需要编写的代码量暴增,增加了项目的复杂度。
  2. 需要对很多业务模块之间的交互抽象成接口定义,对开发人员的设计能力要求更高了。

一个MVP的案例:

 

image-20200620223716639

 

5.MVVM

MVVM 的关系图和 MVP 很相似,最大的不同在于 View 和 ViewModel 之间主要是通过数据绑定的方案来实现交互的。

mvvm

与MVP不同点:数据绑定view->ViewModel

要实现数据绑定,通常都采用发布者-订阅者模式进行实现,但这部分工作如果由开发人员自己来写代码实现,其实还是挺复杂的,因此,各大平台都提供了各自的内部实现。比如 Vue 和 React 自身都实现了数据绑定,Android 目前最主流的方案就是采用 Jetpack,iOS 最常用的方案则是结合 ReactiveCocoa(RAC)实现。

6.MVP与MVVM

总结一下,MVP 和 MVVM 都是为了解决界面和数据的分离问题,两者只是采用了不同的实现方案。

MVP 之间的交互主要是通过接口实现的,其主要弊端就是需要编写大量接口

而 MVVM 则是通过数据绑定的方式实现交互,虽然其实现需要依赖具体的一些框架工具,但明显大大减少了开发者需要编写的代码量

 

本文理解内容来自下面的链接,如果需要查看详细内容,点击:

 

 

 

转载地址:https://kerry.blog.csdn.net/article/details/111313908 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:什么是PWA技术?
下一篇:Mysql覆盖索引与回表查询

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年05月03日 17时45分39秒