在MVVM模式中,建议的实例化顺序是什么?

Nic*_*ick 2 c# wpf mvvm

我最近在接受采访时得到了这个问题.他想知道Model View和ViewModel的实例化顺序,实例化的确切顺序是什么?

我认为视图总是先实例化,然后是视图模型,然后是模型.我错了吗?

Ree*_*sey 9

我认为视图总是先实例化,然后是视图模型,然后是模型.我错了吗?

没有单一的标准.一般来说,有两种方法:

  1. View-First - View将首先被实例化,然后实例化ViewModel,它可能会创建底层模型.这通常意味着实例化的顺序是View-> ViewModel-> Model.

  2. ViewModel-First - 创建ViewModel,然后实例化Model.视图由ViewModel之后基于DataTemplates的系统生成.这意味着实例化的顺序是ViewModel-> Model,然后是View(间接来自XAML).

大多数面向设计师优先方法的框架倾向于进行View-First构造.这使得设计师(通常)更容易使用.

许多框架主要面向以开发人员为中心的场景,它们通常会首先使用ViewModel.这种方法实际上可以导致更少的耦合,以及从ViewModel级别更简单的"仅代码"构造.


Wil*_*ode 6

这是一个开放式的问题,因为你可以从概念上看它,在这种情况下,它遵循首字母缩略词.如果你在实践中看它(特别是指WPF或WinStore应用程序),它有点不同.

概念

应该首先实例化模型,因为应用程序的所有后续决策都将基于应用程序设计用于运行的模型.然后是视图模型,因为视图依赖于视图模型,而不是相反.一个VM可以有多个视图,但一个视图通常没有多个视图模型(通常!).然后是显示数据的视图.

练习(在WPF和WinStore应用程序中)

首先实例化App类,它适合VM-M区域的某些奇数部分.但这并不完全相关,因为它超出了模式的范围.通常会创建视图并将其附加到可视树中.然后在代码隐藏中实例化ViewModel,此时加载模型.然后发生大量UI刷新,显示最初加载的所有内容.从那时起,"概念"部分的所有内容都成立.

由于没有明确的答案,这个问题可能因意见而被关闭.但这就是我所见过,读过和经历过的.