WPF,MVVM,ICommand和存储库

时间:2012-12-13 19:59:54

标签: c# wpf mvvm repository

我有一个看起来像这样的WPF应用程序:

enter image description here

viewmodel包装模型并通过INotifyChanged公开与视图相关的所有属性。该视图还绑定到几个ICommand对象,这些对象处理由视图触发的某些行为。我有一个外部ICommand,其唯一目的是将模型保存到数据库中。

我读过的所有内容都表明视图或视图模型都不应该引用存储库。这就是命令3在视图模型之外的原因。

我的问题是双重的。首先,这是一个合理的架构,其次,什么是将模型实例转移到命令3以便将其放入存储库的好方法?

2 个答案:

答案 0 :(得分:9)

我个人认为,让ViewModel拥有对存储库的引用没有问题。试图避免这种情况会导致不必要的并发症。

在MVVM中,ViewModel通常是位于模型上方的“粘合”层 - 而存储库是模型的一部分(它是域特定数据/逻辑的一部分)。我个人对此的看法blog series on MVVM shows a good image

MVVM Diagram

通过将命令3放入VM,让VM直接使用存储库可能比尝试将其分离出来更清晰。

答案 1 :(得分:0)

视图模型应该直接与业务层(域对象+域服务)进行通信,而不是存储库。更进一步,这种沟通应该通过命令完成。

所以你有:

查看 - >查看模型 - >命令 - >域对象/域服务 - >存储库

除非您正在开发一个非常简单的CRUD应用程序......