我正在开发一个我想在不同企业中安装的应用程序。每个企业可能需要此应用程序的不同部分。例如,该应用程序具有以下模块:公司管理、任务管理和簿记管理。一个企业希望我只安装公司管理和簿记管理模块,而其他企业希望安装所有三个模块。
这些模块(我有超过 3 个)位于一个数据库中(历史原因),我不希望将数据库分开。此外,存在依赖关系——每个模块都应该了解公司管理模型,因为它拥有所有客户、工人供应商等列表。除此之外,每个模块都可以被视为一个单独的应用程序。
该应用程序是用 C# .Net 编写的,我正在使用实体框架。这是我的解决方案中的项目列表:
- 数据文件夹
- MyApp.Data.EF4:包含工作单元和存储库模式的 edmx 和实现。我正在使用 POCO,因此 edmx 不会创建实体。仅包含对 MyApp.Common 的引用。
- 模块文件夹
- 公用文件夹
- MyApp.Common:包含要实现的 MyApp.Data.EF4 项目的所有接口。
- MyApp.Company.Domain:包含 Company 模块的域对象 (POCO)。这个项目没有参考任何项目。
- MyApp.Company.Services.Contract:包含此模块公开的服务的接口。
- MyApp.Company.Services:包含服务实现。
- 任务文件夹
- MyApp.Tasks.Domain:包含任务模块的域对象 (POCO)。此项目仅引用 MyApp.Company.Domain。
- MyApp.Tasks.Services.Contract:包含此模块公开的服务的接口。
- MyApp.Tasks.Services:包含服务实现。
- 簿记文件夹
- MyApp.Bookkeeping.Domain:包含 Bookkeeping 模块的域对象 (POCO)。此项目仅引用 MyApp.Company.Domain。
- MyApp.Bookkeeping.Services.Contract:包含此模块公开的服务的接口。
- MyApp.Tasks.Services:包含服务实现。
- 公用文件夹
- 演示文件夹
- MyApp.Web:引用所有其他模块 Service、Contract 和 Domain 的 Web 应用程序。这个特定的网络应用程序应该涵盖我所有模块的演示。这意味着,只有需要所有模块的企业才能获得这个网络应用程序。
因为我的 edmx 真的很大,所以很难管理,所以我想把 edmx 拆分,让每个模块都有自己的 edmx。这将导致 MyApp.Web 项目为每个模块保存工作单元(因为 MyApp.Web 使用所有模块,因此需要所有工作单元)。
我正在考虑将 edmx 拆分为不同的 edmx 对我来说是否是一个好习惯。我会接受任何有助于我决定这是否是个好主意的解释,或者对我的情况有任何好的解决方法。