我是.Net的新手,并试图学习东西.我正在尝试开发一个Prism4 WPF应用程序
我研究了很多(?)和怕得罪人这个和这个等等,并决定实施MVVM,库和的UnitOfWork模式.这个应用程序将是一个单一用户的桌面应用程序(我:-)
所以,我已经创建了一个包含以下项目的解决方案:
我的问题是:
好吧,可能是我在第一篇文章中没有明确表达我想要的内容.提出的答案并不多.我仍然在寻找答案,因为虽然@Rachel建议可能对即时要求有效,但我要小心不要把自己画成一个角落.我开发了一个Access Db,我在Office上为个人使用而开发,它已经成功,现在被50多个用户使用并且不断增长.维护和修改访问代码库在开始时相当简单,但随着应用程序的发展,开始崩溃.这就是为什么我选择重写.Net/Wpf/Prism中的所有东西,并希望确保我得到正确的基本设计.
请讨论.
与此同时,我想出了这个......
首先,我会将您的项目列表稍微简化为Shell、Common、ModuleA和ModuleB。在每个项目中,我都有子文件夹来指定所有内容的位置。例如,ModuleA可能会分为Views、ViewModels和 的文件夹Models
我会将所有接口和全局共享对象放入IUnitOfWork您的Common项目中,因为它将被所有模块使用。
您如何实施IUnitOfWork以及您的实施Repositories方式可能取决于您的模块是什么。
如果您的整个应用程序链接到一个数据库,或共享数据库对象,那么我可能会为 DataAccessLayer 创建另外两个项目。一个将包含可由模块使用的公共接口/类,另一个将包含数据访问层的实际实现,例如实体框架。
如果每个模块都有自己的数据库,或者数据库中有自己的一组对象(即,除非安装了客户模块,否则客户对象不存在),那么我将在模块中实现并让IUnitOfWork它们处理自己的数据访问。不过,我可能在Common库中仍然有一些通用接口供模块构建。
理想情况下,您的所有模块和您都Shell可以访问该Common库。模块不应相互访问,除非它们构建在模块之上。例如,基于基本客户模块构建的客户统计模块应该访问客户模块。
至于你的 ViewModel 是否应该使用 aUnitOfWork或Repository,我会让它们Repository只使用 a 。理想情况下,你Repository应该像一个黑盒子 - ViewModels 可以使用 获取/保存数据Repository,但不应该知道它是如何实现的。存储库可以从服务、实体框架、直接数据访问或任何地方获取数据,而 ViewModel 不会关心。
我不是设计架构方面的专家,但这就是我构建它的方式:)