.net 解决方案源代码组织指南(OO/DDD)
我将开始我的第一个商业项目(.NET),并尝试遵循DDD原则。是否有组织源代码和名称空间的指导原则或通用模式 例如,您的域对象是否位于命名空间.net 解决方案源代码组织指南(OO/DDD),.net,language-agnostic,oop,domain-driven-design,code-organization,.net,Language Agnostic,Oop,Domain Driven Design,Code Organization,我将开始我的第一个商业项目(.NET),并尝试遵循DDD原则。是否有组织源代码和名称空间的指导原则或通用模式 例如,您的域对象是否位于命名空间MyProject.domain或其他名称空间中?你会把具体的实现和接口分开吗?在不同的名称空间中?不同的文件夹?不同的解决方案 我知道这其中很多都是主观的,取决于项目规模,但对于一个相对较小但可扩展的n层项目,一些指导或建议会很有用。我对这方面也不熟悉,但以下是我所做的 我们项目组织的根是我们的公司名称,称之为公司。这些项目的布局如下: Company
MyProject.domain
或其他名称空间中?你会把具体的实现和接口分开吗?在不同的名称空间中?不同的文件夹?不同的解决方案
我知道这其中很多都是主观的,取决于项目规模,但对于一个相对较小但可扩展的n层项目,一些指导或建议会很有用。我对这方面也不熟悉,但以下是我所做的 我们项目组织的根是我们的公司名称,称之为公司。这些项目的布局如下:
- Company.Core有几个名称空间: .数据定义了DAL的接口 .Repository为我们的存储库定义基本接口
- 数据是DAL的具体实现
- Domain是定义存储库接口的域对象
- 存储库是存储库的具体实现
- Company.Tests有许多名称空间: .Data测试DAL,.Data.Mock模拟DAL .Repository测试存储库,.Repository.Mock模拟存储库 .Domain使用模拟存储库测试域对象
它与AutoFac连接在一起有许多正确的方法可以组织DDD应用程序的解决方案,因此可以进行实验。我更改了我的个人解决方案布局几次。我认为细节取决于您使用的技术,但总体组织保持不变
- 每个有界上下文一个解决方案
- 一个包含模型的域项目(实体、值对象、存储库接口等)
- 一个包含NHibernate映射、存储库实现和NHibernate特定类型的Domain.Persistence(或DataAccess)项目。如果您认真计划拥有多个持久层,可以将其命名为Domain.persistence
- 一个包含应用层代码(服务)的应用程序项目
- 任意数量的UI或Windows服务项目
- 具有多个层的模型
- CQRS系统
- 事件源CQRS系统