将模型与视图模型分开的重点是什么? (MVVM)

时间:2014-08-16 03:38:00

标签: c# wpf design-patterns mvvm viewmodel

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

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

对我来说,它听起来像C ++。您有头文件,它描述了定义类的类和实现文件。有没有必要在c#中这样做?

我觉得我不理解分离,因为我不完全理解MVVM模式。如果有人可以为我澄清这将是非常棒的。

提前致谢。

4 个答案:

答案 0 :(得分:5)

为了尝试将此作为更切实的答案,让我们看一个例子。你想拥有相同的旧计算器"一个很好的闪亮WPF程序的例子。

你没有在视图模型中跳入和编写所有内容,而是记住你实际上已经在很久以前为不同的项目编写了这些内容,并且你实际上足够聪明,可以在一个单独的(可重用的)dll中使用所有计算器功能。
所以,你得到了你的模型。

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

另一方面,我们的想法是能够在一个大团队中工作,一些人在逻辑(模型)上工作,一些设计师在视图上工作,另一个人(可以是上述任何一个)可以将这些位与视图模型一起使用。

答案 1 :(得分:1)

模型代表您的数据。 viewmodel仅使用这些模型来驱动您的UI。模型应代表实体......事物。 Viewmodels使用那些东西,这就是区别。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

一个更简单的例子。在当前的分布式体系结构中,您的数据库(Model)和业务逻辑(VM)不必设计在同一物理系统上。因此,某些服务(如WCF或WebApi)可能会暴露数据(模型),然后VM可以轻松使用(通过在项目中添加相应的dll)。

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