Prism 4 WPF应用程序 - 实现了MVVM,存储库和工作单元模式的解决方案体系结构

you*_*vsr 6 wpf prism layer

我是.Net的新手,并试图学习东西.我正在尝试开发一个Prism4 WPF应用程序

  1. Visual Studio CSharp 2010 Express Edition,
  2. 棱镜v4,
  3. Unity作为IoC,
  4. SQL Server CE作为数据存储.

我研究了很多(?)和怕得罪人这个这个等等,并决定实施MVVM,库和的UnitOfWork模式.这个应用程序将是一个单一用户的桌面应用程序(我:-)

所以,我已经创建了一个包含以下项目的解决方案:

  1. Shell(应用程序布局和启动逻辑)
  2. 通用(应用程序基础结构和工作流逻辑)
  3. BusinessModuleA(Views和ViewModels)
  4. BusinessModuleA.Model(商业实体 - POCO)
  5. BusinessModuleA.Data(存储库,数据访问(EF?))
  6. BusinessModuleB(Views和ViewModels)
  7. BusinessModuleB.Model(商业实体 - POCO)
  8. BusinessModuleB.Data(存储库,数据访问(EF?))

我的问题是:

  1. 哪个项目应该参考哪些项目?
  2. 如果我在'BusinessModuleX.Data'中实现存储库,这很明显,我应该在哪里定义IRepositories?
  3. 我应该在哪里定义IUnitOfWork以及我应该在哪里实现UnitOfWork?
  4. 如果我在ViewModels中使用UnitOfWork和Repositories,这样可以吗?Instict说这是糟糕的设计.
  5. 如果上面的(4)不好,那么ViewModel应该通过服务层(另一个项目?)获取数据.那么,我们如何跟踪对实体的更改,以便在服务层上调用这些对象上的相关CRUD方法?
  6. 这是否有任何意义,或者我错过了大局?

好吧,可能是我在第一篇文章中没有明确表达我想要的内容.提出的答案并不多.我仍然在寻找答案,因为虽然@Rachel建议可能对即时要求有效,但我要小心不要把自己画成一个角落.我开发了一个Access Db,我在Office上为个人使用而开发,它已经成功,现在被50多个用户使用并且不断增长.维护和修改访问代码库在开始时相当简单,但随着应用程序的发展,开始崩溃.这就是为什么我选择重写.Net/Wpf/Prism中的所有东西,并希望确保我得到正确的基本设计.

请讨论.

与此同时,我想出了这个......

Rac*_*hel 4

首先,我会将您的项目列表稍微简化为ShellCommonModuleAModuleB。在每个项目中,我都有子文件夹来指定所有内容的位置。例如,ModuleA可能会分为ViewsViewModels和 的文件夹Models

我会将所有接口和全局共享对象放入IUnitOfWork您的Common项目中,因为它将被所有模块使用。

您如何实施IUnitOfWork以及您的实施Repositories方式可能取决于您的模块是什么。

  • 如果您的整个应用程序链接到一个数据库,或共享数据库对象,那么我可能会为 DataAccessLayer 创建另外两个项目。一个将包含可由模块使用的公共接口/类,另一个将包含数据访问层的实际实现,例如实体框架。

  • 如果每个模块都有自己的数据库,或者数据库中有自己的一组对象(即,除非安装了客户模块,否则客户对象不存在),那么我将在模块中实现并让IUnitOfWork它们处理自己的数据访问。不过,我可能在Common库中仍然有一些通用接口供模块构建。

理想情况下,您的所有模块和您都Shell可以访问该Common库。模块不应相互访问,除非它们构建在模块之上。例如,基于基本客户模块构建的客户统计模块应该访问客户模块。

至于你的 ViewModel 是否应该使用 aUnitOfWorkRepository,我会让它们Repository只使用 a 。理想情况下,你Repository应该像一个黑盒子 - ViewModels 可以使用 获取/保存数据Repository,但不应该知道它是如何实现的。存储库可以从服务、实体框架、直接数据访问或任何地方获取数据,而 ViewModel 不会关心。

我不是设计架构方面的专家,但这就是我构建它的方式:)