我目前正在学习WPF中的MVVM。我正在创建一个应用程序,其中使用Code First方法结合Entity Framework。我的项目应该有什么适当的结构?
MVVM具有以下结构:
Views
ViewModels
Model
我的当前计划是将我的POCO放到Model文件夹中。我应该把继承自DbContext类的类放在哪里?
我目前正在学习WPF中的MVVM。我正在创建一个应用程序,其中使用Code First方法结合Entity Framework。我的项目应该有什么适当的结构?
MVVM具有以下结构:
Views
ViewModels
Model
我的当前计划是将我的POCO放到Model文件夹中。我应该把继承自DbContext类的类放在哪里?
MVVM没有规定服务基础设施。虽然你的POCO domain应该保留在“Model”目录中,但DbContext不应该被MVVM实现所知道。
换句话说,不应该有一个继承自DbContext的类。
通常我通过ViewModelProvider构造提供这种类型的功能,将“实际”模型抽象出来,使其与ViewModel实现分离。这有助于更容易地进行Mocking等操作。所有具体的viewModel实现都应通过该抽象“提供”。
模型 (Models)、视图 (Views) 和视图模型 (ViewModels) 均是应用程序的不同层。它们实际的位置并不重要,只要它们之间的交互不违反 MVVM 模式即可。
话虽如此,我通常遵循 ASP.NET MVC 和 T4Scaffolding NuGet 包所设置的模式。安装该包后,您可以执行以下命令。
Scaffold Repository -ModelType Person
这将基于Person模型类为您搭建两个新类。
首先是一个标准的DbContext类,就像您所期望的那样。并不打算让您的视图或视图模型直接与此类交互。仓储类提供了对上下文的抽象;这是您应该在层之间传递的类。仓储还比DbContaxt更容易模拟,并且可以轻松地使用完全不同的技术(如WCF数据服务)来实现。
希望这个答案至少给您一个好的起点。