MVC、MVP、MVVM的区别及联系

MVC、MVP、MVVM

  • MVC 模式: 从大锅烩时代进化,引入了分层的概念,但是层与层之间耦合明显,维护起来不容易;
  • MVP 模式: 在 MVC 基础上进一步解耦,视图层和模型层完全隔离,交互只能通过管理层来进行,问题是更新视图需要管理层手动来进行;
  • MVVM 模式: 引入双向绑定机制,帮助实现一些更新视图层和模型层的工作,让开发者可以更专注于业务逻辑,相比于之前的模式,可以使用更少的代码量完成更复杂的交互; MVC、MVP、MVVM 模式是我们经常遇到的概念,其中 MVVM 是最常用到的,在实际项目中往往没有严格按照模式的定义来设计的系统,开发中也不一定要纠结自己用的到底是哪个模式,合适的才是最好的。

1. MVC (Model View Controller)

MVC 模式将程序分为三个部分:模型(Model)、视图(View)、控制器(Controller)。

  • Model 模型层: 业务数据的处理和存储,数据更新后更新;
  • View 视图层: 人机交互接口,一般为展示给用户的界面;
  • Controller 控制器层 : 负责连接 Model 层和 View 层,接受并处理 View 层触发的事件,并在 Model 层的数据状态变动时更新 View 层;
  • MVC 模式的目的是通过引入 Controller 层来将 Model 层和 View 层分离,分层的引入是原来大锅烩方式的改进,使得系统在可维护性和可读性上有了进步。
  • MVC 模式提出已经有四十余年,MVC 模式在各个书、各个教程、WIKI 的解释有各种版本,甚至 MVC 模式在不同系统中的具体表现也不同,这里只介绍典型 MVC 模式的思路。

典型思路是 View 层通过事件通知到 Controller 层,Controller 层经过对事件的处理完成相关业务逻辑,要求 Model 层改变数据状态,Model 层再将新数据更新到 View层。示意图如下:

在实际操作时,用户可以直接对 View 层的 UI 进行操作,以通过事件通知 Controller 层,经过处理后修改 Model 层的数据,Model 层使用最新数据更新 View。示意图如下:

用户也可以直接触发 Controller 去更新 Model 层状态,再更新 View 层:

 

某些场景下,View 层直接采用观察者/发布订阅模式监听 Model 层的变化,这样 View层和 Model 层相互持有、相互操作,导致紧密耦合,在可维护性上有待提升。由此,MVP 模式应运而生 。

2. MVP (Model View Presenter)

MVP 模式将程序分为三个部分:模型(Model)、视图(View)、管理层(Presenter)。

  • Model 模型层: 只负责存储数据,与 View 呈现无关,也与 UI 处理逻辑无关,发生更新也不用主动通知 View
  • View 视图层: 人机交互接口,一般为展示给用户的界面;
  • Presenter 管理层 : 负责连接 Model 层和 View 层,处理 View 层的事件,负责获取数据并将获取的数据经过处理后更新 View
  • MVC 模式的 View 层和 Model 层存在耦合,为了解决这个问题,MVP 模式将 View 层和 Model 层解耦,之间的交互只能通过 Presenter 层,实际上,MVP 模式的目的就是将 View 层和 Model 层完全解耦,使得对 View 层的修改不会影响到 Model 层,而对 Model 层的数据改动也不会影响到View 层。

典型流程是 View 层触发的事件传递到 Presenter 层中处理,Presenter 层去操作 Model 层,并且将数据返回给 View层,这个过程中,View 层和 Model 层没有直接联系。而 View 层不部署业务逻辑,除了展示数据和触发事件之外,其它时间都在等着 Presenter 层来更新自己,被称为「被动视图」。

示意图如下:

在实际操作时,用户可以直接对 View 层的 UI 进行操作,View 层通知 Presenter 层,Presenter 层操作 Model 层的数据,Presenter 层获取到数据之后更新 View。示意图如下:

 

  • 由于 Presenter 层负责了数据获取、数据处理、交互逻辑、UI 效果等等功能,所以 Presenter 层就变得强大起来,相应的,Model 层只负责数据存储,而 View 层只负责视图,ModelView 层的责任纯粹而单一,如果我们需要添加或修改功能模块,只需要修改 Presenter 层就够了。由于 Presenter 层需要调用 View 层的方法更新视图,Presenter 层直接持有 View 层导致了 PresenterView 的依赖。

正如上所说,更新视图需要 Presenter 层直接持有 View 层,并通过调用 View 层中的方法来实现,还是需要一系列复杂操作,有没有什么机制自动去更新视图而不用我们手动去更新呢,所以,MVVM 模式应运而生。

3. MVVM (Model View ViewModel)

MVVM 模式将程序分为三个部分:模型(Model)、视图(View)、视图模型(View-Model)。

MVP 模式类似,Model 层和 View 层也被隔离开,彻底解耦,ViewModel 层相当于 Presenter 层,负责绑定 Model 层和 View 层,相比于 MVP 增加了双向绑定机制。

结构图如下:

MVVM 模式的特征是 ViewModel 层和 View 层采用双向绑定的形式(Binding),View 层的变动,将自动反映在 ViewModel 层,反之亦然。

  • 但是双向绑定给调试和错误定位带来困难,View 层的异常可能是 View 的代码有问题,也有可能是 Model 层的问题。数据绑定使得一个位置的 Bug 被传递到别的位置,要定位原始出问题的地方就变得不那么容易了。
  • 对简单UI 来说,实现 MVVM 模式的开销是不必要的,而对于大型应用来说,引入 MVVM 模式则会节约大量手动更新视图的复杂过程,是否使用,还是看使用场景。
  • Vue 的双向绑定机制应该算是比较有 MVVM 模式的影子,但 Vue 文档 里面是这么描述:

这是为什么呢,因为 MVVM 模式要求 Model 层和 View 层完全解耦,但是由于 Vue 还提供了 ref 这样的 API,使得 Model 也可以直接持有 View

 

 

但是大多数帖子都说直接称呼 Vue 为 MVVM 框架,可见这些模式的划分也不是那么严格。



作者:Sky飞羽
链接:https://www.jianshu.com/p/ad159a153c3c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

### 回答1: MVCMVPMVVM 都是软件架构模式,用于组织代码和实现分离关注点的目的。 MVC(Model-View-Controller)是最早的一种架构模式,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。其中,模型表示应用程序的数据和业务逻辑,视图表示用户界面,控制器负责协调模型和视图之间的交互。 MVP(Model-View-Presenter)是在 MVC 模式的基础上发展而来的,它将控制器改为了 Presenter,Presenter 负责协调模型和视图之间的交互,同时也负责处理用户输入和业务逻辑。MVP 模式将视图和模型完全分离,使得视图可以独立于模型进行测试和开发MVVM(Model-View-ViewModel)是在 MVP 模式的基础上发展而来的,它将 Presenter 改为了 ViewModel,ViewModel 负责协调模型和视图之间的交互,同时也负责处理用户输入和业务逻辑。MVVM 模式引入了数据绑定机制,使得视图可以自动更新,同时也使得开发者可以更加专注于业务逻辑的实现。 总的来说,MVCMVPMVVM 都是用于实现分离关注点的目的,它们的区别在于各自的架构模式和角色的不同。MVC 模式是最早的一种架构模式,MVP 模式是在 MVC 模式的基础上发展而来的,MVVM 模式是在 MVP 模式的基础上发展而来的,引入了数据绑定机制。 ### 回答2: MVCMVPMVVM 都是一种设计模式,用于解决应用程序中视图、模型和控制器之间的关系问题。虽然它们都是为了实现分层架构而生,但它们在设计理念上有所不同,各有优劣。下面将分别介绍其区别与联系。 MVC(Model-View-Controller)模式最早于 1970 年代提出,它将应用程序划分为三个主要部分:数据模型、视图(用户界面)和控制器。其中,数据模型表示应用程序中的数据,视图表示呈现数据的用户界面,控制器负责处理用户的输入,并更新数据模型和视图。MVC 的最大优点是能够有效地将应用程序分离为多个独立的组成部分,分层清晰,便于维护和修改。但缺点是随着应用程序功能的增加,控制器变得越来越复杂,难以维护。 MVP(Model-View-Presenter)模式是在 MVC 模式的基础上提出的,它将一个控制器改为了一个或多个 Presenter。在 MVP 模式中,Presenter 接收视图的用户输入,并将业务逻辑分离到另一个模块中进行进一步处理。这样做的好处是,可以将业务逻辑从视图中解耦出来,视图与模型之间的关系更加松散,Presenter 则作为中间件来进行调控。MVP 模式的主要优点是:视图和控制器之间的耦合度降低,Presenter 可以方便地进行单元测试,MVP 更加适合复杂的业务逻辑场景。 MVVM(Model-View-ViewModel)是一种新型的设计模式,它于 2005 年提出。MVVM 将控制器和 Presenter 都替换为 ViewModel, ViewModel 作为视图和模型之间的中间层,用于绑定和管理视图和模型的数据。MVVM 模式的最大优点是,能够通过数据绑定自动处理模型和视图之间的同步,视图可以实现高度的灵活性,而模型又可独立于视图进行单元测试和开发。但与此同时,MVVM 模式也有一些缺点,例如较高的维护成本,增加了框架学习的难度等。 总的来说,MVCMVPMVVM 都是为了更好地分离视图和模型之间的关系,实现高内聚低耦合的目标。而MVVM 又是在 MVCMVP 的基础上不断演化而来,它的优缺点各不相同,应该根据实际情况来进行选择和使用。 ### 回答3: MVCMVPMVVM 是三种常见的前端架构设计模式,它们都致力于将应用程序的构建分离成三个不同的组成部分,以此来改进代码的可维护性、测试性和可扩展性。 MVC 是 Model-View-Controller 的缩写,它的核心思想是将应用程序分成三个独立的部分。Model 负责处理应用程序中的数据,View 是用户看到的 UI 部分,Controller 负责协调 View 和 Model 之间的通信。 MVP 是 Model-View-Presenter 的缩写,它是从 MVC 演变而来的一种模式。MVP 强调了对 View 和 Model 的分离,Presenter 代替了 Controller的职责,它是 View 和 Model 之间的中介者,将 View 的事件转换为 Model 的数据操作。 MVVM 是 Model-View-ViewModel 的缩写,它是一种完全基于数据绑定的设计模式。在 MVVM 中,ViewModel 从 Model 中获取数据并将数据绑定到 View 中。当 ViewModel 中的数据发生变化时,View 会自动更新。 三种架构的联系和区别在于: 共同点: 1. 都将应用程序分成了不同的部分,有助于提高代码可维护性和可测试性等。 2. 都是基于分层架构的设计思想。 3. 都有一个中介者来处理数据和视图之间的通信。 区别: 1. MVC将数据直接放到View中,而MVPMVVM都在Presenter或ViewModel中进行逻辑处理。 2. MVPMVVM更加注重解决应用程序中的业务逻辑问题,而MVC则更加注重解决应用程序中的客户端问题。 3. MVVM是一种使用数据绑定和命令处理的模式,可以让开发人员更加关注数据和逻辑处理,而不用关注UI的布局和样式。 4. MVPMVVM都优化了MVC中的Controller,使得Presenter或ViewModel分离了View和Model,并且降低了代码复杂度。 无论是MVCMVP还是MVVM,它们都有各自的优缺点,开发人员可以根据具体情况选择最适合的架构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值