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

本文关键字:实例化 顺序 是什么 MVVM 模式 | 更新日期: 2023-09-27 18:34:02

我最近在一次采访中被问到这个问题。他想知道模型视图和视图模型的实例化顺序,实例化的精确顺序是什么?

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

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

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

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

  1. 视图优先 - 视图将首先实例化,然后实例化视图模型,这可能会创建基础模型。 这通常意味着实例化的顺序是视图>视图模型>模型。

  2. 视图模型优先 - 创建视图模型,进而实例化模型。 视图由系统在视图模型之后基于数据模板生成。 这意味着实例化的顺序将是 ViewModel->Model,然后是 View(间接来自 XAML(。

大多数主要面向设计师优先方法的框架倾向于进行视图优先构造。 这使得与设计器(通常(合作变得更加容易。

许多主要面向以开发人员为中心的场景的框架通常会首先执行 ViewModel。 这种方法实际上可以减少耦合,并且从 ViewModel 级别对所有内容进行更简单的"纯代码"构造。

这是一个开放式问题,因为您可以从概念上看待它,在这种情况下,它遵循首字母缩略词。如果你在实践中看它(特别是参考WPF或WinStore Apps(,它有点不同。

概念

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

练习(在 WPF 和 WinStore 应用中(

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

这个问题可能会因意见而结束,因为没有明确的答案。 但这是我所见所闻、所读到、所经历的。

嗯,

这是一个奇怪的面试问题。在我看来,总的来说,我会同意你的看法。视图模型将实例化模型,视图将首先实例化视图模型。但是,当然,这在很大程度上取决于应用程序的体系结构。WPF 的美妙之处在于能够以不同的方式完成这些操作。然后你也有依赖注入,所以我想说答案应该是"这取决于"。

这个问题有点愚蠢,因为它仅限于一个简单的场景,其中每个层都是一个类。 假设一个视图模型提供另一个视图模型。如果我们决定"视图优先",我们是否需要创建另一个视图,然后才能在原始视图模型上调用该函数?如果必须根据返回的视图模型选择视图,该怎么办?另一方面,如果我们决定"视图模型优先",那么如果必须根据从视图中输入的参数来选择新的视图模型怎么办?

分层体系结构与依赖关系有关。MVVM 表示 V 取决于 VM,VM 取决于 M。它没有说明实例化顺序。您可能会决定将依赖项传递到构造函数中,这意味着实例化顺序需要为 M-VM-V,但我看不出有任何实际理由尝试在整个应用程序中强制执行这样一个小细节

恕我直言,这是一个特洛伊木马问题,看看一个人如何思考而不是实际答案,看看是否可以量化他们对实际 MVVM 项目的经验。