我目前正在 WPF 中学习 MVVM。我正在使用 Code First 方法创建一个包含实体框架的应用程序。我的项目的正确结构应该是什么?
MVVM 有这个结构
Views
ViewModels
Model
我目前的计划是将我的 POCO 放入 Model 文件夹中。我应该把继承自 DbContext 类的类放在哪里?
我目前正在 WPF 中学习 MVVM。我正在使用 Code First 方法创建一个包含实体框架的应用程序。我的项目的正确结构应该是什么?
MVVM 有这个结构
Views
ViewModels
Model
我目前的计划是将我的 POCO 放入 Model 文件夹中。我应该把继承自 DbContext 类的类放在哪里?
MVVM 本身并没有指定服务基础架构。虽然您的 POCO 域应保留在“模型”目录中,但 MVVM 实现不应该知道 DbContext。
换句话说,不应该有一个派生自 DbContext 的类。
我通常通过 ViewModelProvider 构造来提供这种类型的功能,该构造将“实际”模型从 ViewModel 实现中抽象出来。这有助于更轻松地模拟等。所有具体的 viewModel 实现都应该通过这个抽象来“提供”。
Models、Views 和 ViewModels 存储桶实际上只是应用程序的层。它们的实际位置无关紧要,只要它们之间的交互不违反 MVVM 模式即可。
也就是说,我倾向于遵循 ASP.NET MVC 和 T4Scaffolding NuGet 包设置的模式。安装该软件包后,您可以发出以下命令。
Scaffold Repository -ModelType Person
这将基于 Person 模型类为您搭建两个新类。
第一个只是您期望的标准 DbContext 类。您的 Views 或 ViewModles 不会直接与此类交互。存储库类提供了对上下文的抽象;这是你应该在层之间传递的那个。存储库也比 DbContaxt 更容易模拟,并且可以使用完全不同的技术(如 WCF 数据服务)轻松实现。
希望这个答案至少为您提供了一个很好的起点。