MVVM(Model-View-ViewModel)是由微软架构师 Ken Cooper 和 Ted Peters发明的一种软件架构模式。MVVM 将应用程序的业务逻辑与用户界面(UI)清晰地分开。MVVM 架构的最终目标是使视图完全独立于应用程序逻辑。
什么是 MVVM (模型-视图-视图模型)?
MVVM(模型-视图-视图模型)是一种软件架构模式,有助于将应用程序的用户界面 (UI) 与业务逻辑或后端逻辑分开。MVVM 将应用程序分解为不同的组件,以方便开发,并使其代码更易于测试、维护和扩展。
关键 MVVM 组件
模型
该模型代表应用的域模型,其中可能包括数据模型以及业务和验证逻辑。它与 ViewModel 进行通信,但无法感知 View。
视图
View 代表应用程序的用户界面,包含有限的、纯粹的展示逻辑,用于实现视觉行为。View 与业务逻辑完全无关。换句话说,View 是一个“哑”类,它从不包含数据,也不会直接操作数据。它通过数据绑定与 ViewModel 通信,并且不知道 Model 的存在。
视图模型
ViewModel 是 View 和 Model 之间的纽带。它通过数据绑定实现并公开 View 使用的公共属性和命令。如果发生任何状态更改,ViewModel 会通过通知事件通知 View。
MVVM 架构如何工作?
理解 MVVM 架构的关键是理解 MVVM 中的三个关键组件如何相互作用。因为 View 只与 ViewModel 通信,而 ViewModel 只与 Model 通信。
所有用户交互都发生在 View 中,View 负责检测用户的输入(鼠标点击、键盘输入)并通过数据绑定将其转发给 ViewModel。数据绑定可以通过回调或属性实现,并构成 View 和 ViewModel 之间的具体链接。
ViewModel 实现视图可以绑定到的属性和命令。这些属性和命令定义了视图可以向用户提供的功能,尽管如何显示它完全取决于视图。ViewModel 还负责向视图提供来自模型类的数据,以供视图使用。为了实现这一点,ViewModel 可以将模型类直接公开给视图,在这种情况下,模型类需要支持数据绑定和更改通知事件。
模型是模拟应用程序域的类。模型封装了应用程序的数据和业务逻辑。它们可以被视为与应用程序的视觉方面完全无关的业务对象。
MVVM 的缺点
最早提出 MVVM 的微软架构师 John Gossman认为该模式的主要缺点(如下:
- 复杂性: 在创建简单的用户界面时,MVVM 有点过头了。在处理大型项目时,设计 ViewModel 以获得适当的通用性可能非常困难。
- 难以调试: 由于数据绑定是声明性的,因此比传统的命令式代码更难调试。
MVVM 与 MVC:有什么区别?
MVC(模型-视图-控制器)是另一种架构模式,它将应用程序分为三个逻辑组件:
- 模型: 包括所有数据和相关业务逻辑。从控制器接收用户输入。
- 视图: 包含应用程序的 UI 逻辑。
- 控制器: 通过接收用户输入并可能验证该输入,连接视图和模型。然后,控制器将输入传递给模型。
以下是 MVC 和 MVVM 架构模式之间的主要区别:
- 在 MVC 中,View 和 Model 之间的中介组件是 Controller。在 MVVM 中,中介是 ViewModel。
- 在 MVC 中,视图包含逻辑。MVVM 尝试在视图中包含最少量的后台代码(逻辑)。该逻辑则驻留在 ViewModel 中。
- 在 MVC 中,View 没有对 Controller 的引用。在 MVVM 中,View 引用 ViewModel。
- 在 MVC 中,视图和控制器之间的通信是单向的(控制器引用视图)。在 MVVM 中,得益于数据绑定技术,通信是双向的。
- MVC 是软件中最古老的架构模式之一。MVVM 是一种相对较新的模式,由 MVC 发展而来。