WPF/MVVM - ViewModel应该放在哪里?

3
我有点陌生MVVM模式,正在努力理解它。我目前想要弄清楚的是:在一个良好结构化的解决方案中,ViewModels应该放在哪里?
目前我的设计看起来像这样(有点):
- 应用程序(视图) - 领域特定代码(类库) - 网关(类库)
如果我要添加另一种类型的视图(例如ASP.NET或Silverlight),最适合ViewModel存在的位置是哪里?
3个回答

4
视图模型应该放在应用程序层,因为它们往往是技术特定的。
例如,您可能希望将视图属性数据绑定到基于视图模型状态的特定颜色。但是,在Windows Forms、ASP.NET和WPF上,颜色由不同类型实现,因此您无法在不同技术之间重用视图模型。
如果您添加新应用程序,则还必须提供新的视图模型。

那么您的意思是ViewModel代码应该与视图代码位于同一个项目中?在WPF和Silverlight的情况下呢?如果代码编写方式使得Silverlight可以使用它(我并不是说它可以:(),我是否仍然需要为Silverlight应用程序和WPF应用程序编写单独的ViewModels?(如果这些问题看起来很愚蠢,对不起) - AshtonKJ
1
它可以与View代码位于同一项目中,也可以位于另一个项目中。重要的是,ViewModel往往针对特定技术。由于WPF和SL非常相似,您可能能够编写通用的ViewModels。 - Mark Seemann
1
非常好,感谢您的回答。对我来说,这听起来几乎像是我应该进行一些测试,看看是否可以在SL和WPF之间实现ViewModel的可重用性。然后,我将有一个单独的ViewModel项目,专门针对我使用ASP.NET的情况。 - AshtonKJ

3

最近,我建立了一款MVVM桌面应用程序,它有两种版本:

  • WPF文档基础GUI
  • 控制台应用程序

这两个exe都使用相同的视图模型,一个是WPF,另一个不是。

我能够将我的解决方案拆分为以下项目(库/ exe):

  • 非项目相关可重用代码(称为Common)
  • 项目模型+持久性
  • 项目视图模型
  • WPF应用程序+视图
  • 控制台应用程序

仅通过使用视图模型,构建控制台应用程序版本非常容易。控制台应用程序代码少于200行,基本上只是加载ProjectViewModel并对其进行操作。


1

这篇文章描述了一种具体的WPF MVVM应用程序架构。

层次结构:

  • 表示层: 视图
  • 应用程序层: 视图模型
  • 域层: 领域特定的代码

WAF 应该开始使用 MEF。因为 MEFedMVVM 太棒了。 - Elisabeth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接