我有一个看起来像这样的WPF应用程序:
viewmodel包装模型并通过INotifyChanged公开与视图相关的所有属性。该视图还绑定到几个ICommand对象,这些对象处理由视图触发的某些行为。我有一个外部ICommand,其唯一目的是将模型保存到数据库中。
我读过的所有内容都表明视图或视图模型都不应该引用存储库。这就是命令3在视图模型之外的原因。
我的问题是双重的。首先,这是一个合理的架构,其次,什么是将模型实例转移到命令3以便将其放入存储库的好方法?
答案 0 :(得分:9)
我个人认为,让ViewModel拥有对存储库的引用没有问题。试图避免这种情况会导致不必要的并发症。
在MVVM中,ViewModel通常是位于模型上方的“粘合”层 - 而存储库是模型的一部分(它是域特定数据/逻辑的一部分)。我个人对此的看法blog series on MVVM shows a good image:
通过将命令3放入VM,让VM直接使用存储库可能比尝试将其分离出来更清晰。
答案 1 :(得分:0)
视图模型应该直接与业务层(域对象+域服务)进行通信,而不是存储库。更进一步,这种沟通应该通过命令完成。
所以你有:
查看 - >查看模型 - >命令 - >域对象/域服务 - >存储库强>
除非您正在开发一个非常简单的CRUD应用程序......