.net 解决方案源代码组织指南(OO/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

我将开始我的第一个商业项目(.NET),并尝试遵循DDD原则。是否有组织源代码和名称空间的指导原则或通用模式

例如,您的域对象是否位于命名空间
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服务项目
看看我的项目。它包含针对同一问题的多种DDD解决方案。我刚刚描述了最典型的简单的一个,但还有更复杂的,具体来说:

  • 具有多个层的模型
  • CQRS系统
  • 事件源CQRS系统
希望有帮助