MVVM——职责
MVVM——职责
MVVM 模式由三部分组成 – 模型、视图和视图模型。一开始的大多数开发人员对于 Model、View 和 ViewModel 应该或不应该包含什么以及每个部分的职责是什么都没有什么困惑。
本章我们将学习MVVM模式的每个部分的职责,以便您可以清楚地了解什么样的代码去哪里。MVVM 实际上是一个面向客户端的分层架构,如下图所示。
-
表示层由视图组成。
-
逻辑层是视图模型。
-
表示层是模型对象的组合。
-
生成和持久化它们的客户端服务要么在两层应用程序中直接访问,要么通过服务调用然后到您的应用程序。
-
客户端服务不是 MVVM 模式的正式组成部分,但它经常与 MVVM 一起使用以实现进一步分离并避免重复代码。
模特职责
一般来说,模型是最容易理解的。客户端数据模型支持应用程序中的视图。
-
它由具有属性的对象和一些变量组成,用于在内存中包含数据。
-
其中一些属性可能会引用其他模型对象并创建作为一个整体的模型对象的对象图。
-
模型对象应该引发属性更改通知,这在 WPF 中意味着数据绑定。
-
最后一个责任是验证,这是可选的,但您可以通过 INotifyDataErrorInfo/IDataErrorInfo 等接口使用 WPF 数据绑定验证功能将验证信息嵌入模型对象
查看职责
视图的主要目的和职责是定义用户在屏幕上看到的内容的结构。该结构可以包含静态和动态部分。
-
静态部件是 XAML 层次结构,用于定义组成视图的控件和控件布局。
-
动态部分就像定义为视图一部分的动画或状态变化。
-
MVVM 的主要目标是视图中不应该有任何代码。
-
视图中没有代码是不可能的。鉴于您至少需要构造函数和初始化组件的调用。
-
这个想法是事件处理、动作和数据操作逻辑代码不应该在 View 后面的代码中。
-
还有其他类型的代码必须包含在任何需要引用 UI 元素的代码后面的代码中,这些代码本质上是视图代码。
ViewModel 职责
-
ViewModel 是 MVVM 应用的重点。ViewModel 的主要职责是向视图提供数据,以便视图可以将该数据放在屏幕上。
-
它还允许用户与数据交互并更改数据。
-
ViewModel 的另一个关键职责是封装视图的交互逻辑,但这并不意味着应用程序的所有逻辑都应该进入 ViewModel。
-
它应该能够处理适当的调用顺序,以根据用户或视图上的任何更改使正确的事情发生。
-
ViewModel 还应该管理任何导航逻辑,例如决定何时导航到不同的视图。