将模型从视图模型中分离出来有什么意义?(MVVM)

本文关键字:模型 MVVM 什么 视图 分离出 | 更新日期: 2023-09-27 18:18:09

我不认为我正确理解MVVM模式,因为有一个模型和ViewModel类对我来说似乎是多余的。

我对模型的理解基本上是添加类的次要细节,让ViewModel处理所有的逻辑和实现。如果是这样的话,为什么要把两者分开呢?难道你不能在视图模型中创建变量,属性之类的并且仍然有逻辑吗?

对我来说,在某种程度上听起来像c++。你有描述类的头文件和定义类的实现文件。在c#中这样做有什么意义吗?

我觉得我不理解这种分离,因为我不完全理解MVVM模式。如果有人能给我解释一下就太好了。

将模型从视图模型中分离出来有什么意义?(MVVM)

为了使这个答案更明确,让我们看一个例子。你想在一个漂亮的WPF程序中拥有相同的旧"计算器"示例。

不要直接在视图模型中编写所有的东西,你要记住你在很久以前为一个不同的项目编写了这些东西,你实际上足够聪明,把所有的计算器功能放在一个单独的(可重用的)dll中。
所以,你得到了你的模型。

现在剩下的就是GUI了。您在WPF(视图)中绘制了一个漂亮的闪亮窗口,然后需要将调用和数据从dll桥接到视图。你猜对了……这是你的ViewModel:).

另一个注意事项,这个想法是能够在一个大团队中工作,其中一些人负责逻辑(模型),一些设计人员负责视图,而其他人(当然可以是上述任何一个)可以与视图模型一起工作。

模型代表您的数据。视图模型只使用那些模型来驱动UI。模型应该代表实体……的事情。视图模型使用这些东西,这就是区别

问题是用户界面本身可能变得相当复杂。到处都是小部件——滑块、文本框、按钮、复选框、单选按钮——有时视图不仅仅是"用模型中的值填充这些空白"。从UI的角度来看,ViewModel是数据的模型。通常,这是对完整视图的简化,但它也可能是一个复杂的问题(例如,如果您有一个由存储在持久存储中的单个属性中的多个控件构建的聚合字段)。

再举一个简单的例子。在当前的分布式体系结构中,没有必要将数据库(模型)和业务逻辑(VM)设计在同一个物理系统上。因此,数据(模型)可能由某些服务(如WCF或WebApi)公开,然后可以很容易地被VM使用(通过在项目中添加相应的dll)。

更重要的一点是,您没有必要在UI上显示数据库中表的每一列。因此,通过拥有模型,VM将只获得最终用户在UI上所需的相关数据。