MVC 与 MVVM – 它们之间的区别
MVC 和 MVVM 之间的主要区别
- MVC 框架是一种架构模式,它将应用程序分为三个主要逻辑组件:模型 (Model)、视图 (View) 和控制器 (Controller)。另一方面,MVVM 通过标记语言或 GUI 代码帮助将图形用户界面的开发分开。
- 在 MVC 中,控制器是应用程序的入口点,而在 MVVM 中,视图是应用程序的入口点。
- MVC 的模型组件可以与用户分开进行测试,而 MVVM 易于进行独立的单元测试,并且代码是事件驱动的。
- MVC 架构在控制器和视图之间建立了“一对多”的关系,而 MVVM 架构在视图和视图模型之间定义了“一对多”的关系。
什么是 MVC?
MVC 框架是一种架构模式,它将应用程序分为三个主要逻辑组件:模型 (Model)、视图 (View) 和控制器 (Controller)。因此缩写为 MVC。MVC 的完整形式是模型-视图-控制器。
在此架构中,组件的构建用于处理应用程序的特定开发方面。MVC 将业务逻辑和表示层彼此分离。这种架构模式主要用于桌面图形用户界面 (GUI)。
什么是 MVVM?
MVVM 架构通过标记语言或 GUI 代码促进图形用户界面的开发分离。MVVM 的完整形式是模型-视图-视图模型。
MVVM 的视图模型是值转换器,这意味着视图模型的职责是以易于管理和呈现的方式公开模型中的数据对象。
MVC 模式

MVC 的三个重要组件是:
- 模型 (Model):它包含所有数据及其相关逻辑。
- 视图 (View):向用户呈现数据或处理用户交互。
- 控制器 (Controller):模型和视图组件之间的接口。
让我们详细看看这些组件。
模型
模型组件存储数据和相关逻辑。它代表在控制器组件或任何其他相关业务逻辑之间传输的数据。
例如,控制器对象可以帮助您从数据库中检索客户信息。它会操作数据并将其发送回数据库,或用于呈现相同的数据。
查看
视图是应用程序中表示数据呈现的部分。视图是由从模型数据中收集的数据创建的。视图请求模型提供信息,以便它向用户呈现输出。
视图还表示图表、示意图和表格中的数据。例如,任何客户视图都将包括文本框、下拉列表等所有 UI 组件。
控制器
控制器是应用程序中处理用户交互的部分。控制器解释用户的鼠标和键盘输入,并通知模型和视图进行适当的更改。
控制器向模型发送命令以更新其状态(例如,保存特定文档)。控制器还向其关联的视图发送命令以更改视图的呈现(例如,滚动特定文档)。
MVVM 模式
这是 MVVM 的一个模式:

MVVM 架构在视图和视图模型之间提供双向数据绑定。它还可以帮助您自动化视图模型中更改到视图的传播。视图模型利用观察者模式来更改视图模型。
让我们详细看看这些组件。
模型
模型存储数据和相关逻辑。它代表在控制器组件或任何其他相关业务逻辑之间传输的数据。
例如,控制器对象将从学校数据库中检索学生信息。它会操作数据并将其发送回数据库,或用于呈现相同的数据。
查看
视图代表 UI 组件,如 HTML、CSS、jQuery 等。在
模式中,视图负责显示从控制器接收到的数据作为输出。该视图还将模型转换为用户界面 (UI)。
视图模型
视图模型负责呈现函数、命令、方法,以支持视图的状态。它还负责操作模型并激活视图中的事件。
MVC 和 MVVM 架构之间的区别
以下是 MVVM 和 MVC 之间重要的区别:
MVC(模型-视图-控制器) | MVVM(模型-视图-视图模型) |
---|---|
控制器是应用程序的入口点。 | 视图是应用程序的入口点。 |
控制器与视图之间是一对多的关系。 | 视图与视图模型之间是一对多的关系。 |
视图没有控制器引用 | 视图拥有视图模型的引用。 |
MVC 是旧模型 | MVVM 是一个相对较新的模型。 |
难以阅读、更改、单元测试和重用此模型 | 当有复杂的数据绑定时,调试过程会很复杂。 |
MVC 模型组件可以独立于用户进行测试 | 易于进行独立的单元测试,并且代码是事件驱动的。 |
MVC 的特点
以下是 MVC 的重要特点:
- 易于且无障碍的测试。可测试性强、可扩展且可插拔的框架。
- 它允许您利用 ASP.NET、Django、JSP 等现有功能。
- 它提供了对 HTML 和 URL 的完全控制。
- 它支持测试驱动开发 (TDD)。
- 此架构提供了逻辑分离。
- 允许为 SEO 友好的 URL 进行路由。
- 提供可理解和可搜索的 URL 映射。
MVVM 的特点
以下是 MVVM 架构的特点:
- MVVM 是为具有数据绑定功能的桌面应用程序编写的——XAML 和 INotifyPropertyChanged 接口。
- 如果您想修改视图模型,视图模型会使用观察者模式。
- MVVM 模式主要由 WPF、Silverlight、nRoute 等使用。
MVC 的优点
以下是 MVC 的优点/好处:
- 更容易支持新型客户端。
- 不同组件的开发可以并行进行。
- 它通过将应用程序划分为单独的 (MVC) 单元来避免复杂性。
- 它仅使用前端控制器模式,该模式通过单个控制器处理 Web 应用程序请求。
- 提供对测试驱动开发的最佳支持。
- 它适用于 Web 应用程序,这些应用程序由大型 Web 设计师和开发人员团队支持。
- 它提供了清晰的关注点分离 (SoC)。
- 所有类和对象都是相互独立的,因此您可以单独测试它们。
- MVC 允许将控制器上相关操作的逻辑进行分组。
MVVM 的优点
以下是 MVVM 的优点/好处:
- 业务逻辑与 UI 分开。
- 易于维护和测试。
- 易于重用组件。
- 松耦合架构:MVVM 使您的应用程序架构松耦合。
- 您无需引用视图即可为视图模型和模型层编写单元测试用例。
MVC 的缺点
以下是 MVC 的缺点/弊端:
- 业务逻辑与 UI 混合。
- 难以重用和实现测试。
- 无正式的验证支持。
- 增加了复杂性和数据效率低下。
- MVC 与现代用户界面使用的难度。
- 需要多个程序员进行并行编程。
- 需要多种技术的知识。
MVVM 的缺点
以下是 MVVM 的缺点/弊端:
- 控制器中需要维护大量代码。
- 有些人认为对于 MVVM 架构的简单 UI 来说可能有点大材小用。
- 视图和视图模型之间没有紧密的耦合。