2010-05-07 59 views
1

当我在MVVM模式下设计多个视图时,每个视图都得到自己的ViewModel还是它们都共享一个视图?我知道这最终是一个灵活的决定,但最佳做法是什么?有了MVVM,每个UI窗口都有自己的ViewModel吗?

我的直觉告诉我,每个视图都有一个ViewModel(即每个独立的UI窗口)。 MVVM的所有博客示例均显示单一视图,但没有多大限制。

回答

3

是的,基本上这个想法是,您的viewModel应该只能被一个视图使用。如果你使用viewModel填充一个区域(就像在ASP.NET MVC中那样),那么viewModel每次在不同的地方展示时都会“重用”。

这个article是Josh Smith对MVVM模式的讨论。然后,沃德贝尔在这article讨论他认为乔希留下了什么,同时认为乔希的工作仍然非常强大。

病房在阐明这种模式的复杂性并显示存在的紧张情况方面做得非常出色。这里是他对张力的看法:

根据我的经验,在View和ViewModel设计之间有一个“对话框”。虚拟机的存在是为了提供一种观点,即使它力求从任何具体的观点独立出来。虚拟机如果没有可以使用的视图就没有用处; VM开发人员必须明确地注意到View开发人员的不满意。

另一方面,在业务应用程序中,应用程序的必要条件 - 视图必须做什么来满足业务需求 - 是程序员的职责范围,并且最好通过ViewModel的功能进行阐述。

其中有View和ViewModel设计之间的必要张力。作为一名开发人员,我的忠诚在于ViewModel(“应用程序应该做一些有价值的事情”),但以牺牲View为代价来捍卫这种忠诚是愚蠢的(“好的UX对于使应用程序易于学习和使用”)。

1

是的,每个视图都应该有它的ViewModel。

我不知道WPF里面,但通常ViewModel介于UI组件和业务逻辑组件之间。换句话说:特定于视图/模型对 - 这是此组件存在的唯一原因...

HTH。

2

对我来说,这是一个主观的声明 - 教科书,我可以肯定地说一个1-1配对 - 并且肯定没有什么错误/正在积极主动地设置1-1范例。但是,如果您有多个视图,每个视图代表相同数据的一部分,您不一定必须拥有1个视图,您可以在多个视图中重复使用同一个视图,直到出现偏差为止。视图模型的目的是在用户界面和业务层之间架起一座桥梁......如果业务功能相同,您要么有一个共同的视图模型界面或基础,并且要放下或者要复制相同的逻辑多次。如果视图是唯一发生变化的东西,那么在再次使用相同视图模型之前,不会出现问题,直到出现偏差。

在wpf中,你应该绑定到模型上的值,所以除非你的视图模型引用了你不应该成为问题的具体视图。即使是这样,你也可以抽象出一个视图契约(接口),并将属性改为该类型。

相关问题