MVVM – 职责

MVVM 模式由三部分组成:模型、视图和 ViewModel。大多数开发人员在开始时对模型、视图和 ViewModel 应该或不应该包含什么以及每个部分的职责是什么感到困惑。

在本章中,我们将学习 MVVM 模式每个部分的职责,以便您清楚地了解什么样的代码应该放在哪里。 MVVM 实际上是客户端的分层架构,如下图所示。

MVVM Responsibilities
  • 表示层由视图组成。

  • 逻辑层是视图模型。

  • 表示层是模型对象的组合。

  • 生成和持久化它们的客户端服务要么在两层应用程序中直接访问,要么通过服务调用进入应用程序然后调用。

  • 客户端服务不是 MVVM 模式的正式组成部分,但它经常与 MVVM 一起使用,以实现进一步的分离并避免重复代码。

模型职责

一般来说,模型是最容易理解的。它是支持应用程序中的视图的客户端数据模型。

  • 它由具有属性的对象和一些变量组成,用于在内存中包含数据。

  • 其中一些属性可能引用其他模型对象并创建对象图,整个对象图就是模型对象。

  • 模型对象应引发属性更改通知,在 WPF 中,这意味着数据绑定。

  • 最后一个职责是验证,这是可选的,但您可以通过 INotifyDataErrorInfo/IDataErrorInfo 等接口使用 WPF 数据绑定验证功能将验证信息嵌入模型对象中。

视图职责

视图的主要目的和职责是定义用户在屏幕上看到的内容的结构。该结构可以包含静态和动态部分。

  • 静态部分是定义视图所包含的控件和控件布局的 XAML 层次结构。

  • 动态部分就像定义为视图一部分的动画或状态更改。

  • MVVM 的主要目标是视图中不应有隐藏代码。

  • 视图中不可能没有隐藏代码。在 View 中,您至少需要构造函数和初始化组件的调用。

  • 这个想法是,事件处理、操作和数据操作逻辑代码不应该在 View 的后台代码中。

  • 还有其他类型的代码必须放在后台代码中,任何需要引用 UI 元素的代码本质上都是视图代码。

ViewModel 职责

  • ViewModel 是 MVVM 应用程序的重点。 ViewModel 的主要职责是向视图提供数据,以便视图可以将数据显示在屏幕上。

  • 它还允许用户与数据交互并更改数据。

  • ViewModel 的另一个关键职责是封装视图的交互逻辑,但这并不意味着应用程序的所有逻辑都应该进入 ViewModel。

  • 它应该能够处理适当的调用顺序,以便根据用户或视图上的任何更改执行正确的操作。

  • ViewModel 还应该管理任何导航逻辑,例如决定何时导航到其他视图。