3

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

例如,您的域对象是否进入命名空间MyProject.Domain或其他什么?你会把具体的实现和接口分开吗?在不同的命名空间中?不同的文件夹?不同的解决方案?

我知道这其中很多是主观的,并且取决于项目规模,但是对于开始一个相对较小但可扩展的 n 层项目的一些指示或建议会很有用。

4

2 回答 2

2

有许多正确的方法来组织 DDD 应用程序的解决方案,所以要对实验持开放态度。我几次更改了我的个人解决方案布局。我认为细节取决于您使用的技术,但整体组织保持不变。

  • 每个有界上下文一个解决方案
  • 一个包含模型(实体、值对象、存储库接口等)的域项目
  • 一个包含 NHibernate 映射、存储库实现和 NHibernate 特定类型的 Domain.Persistence(或 DataAccess)项目。如果您有多个持久层的认真计划,您可以将它们命名为 Domain.Persistence..
  • 一个包含应用层代码(服务)的应用项目
  • 任意数量的 UI 或 Windows 服务项目

看看我的DDDSample.Net项目。它包含针对同一问题的许多 DDD 解决方案的变体。我刚刚描述了最典型的简单的一种,但还有更复杂的,具体来说:

  • 具有多个层的模型
  • CQRS 系统
  • 事件溯源 CQRS 系统

希望有帮助。

于 2010-05-31T03:55:43.213 回答
1

我也是这方面的新手,但这就是我所做的。

我们项目组织的根源是我们的公司名称,叫它公司。项目安排如下:

  • Company.Core 有几个命名空间:

    .Data 为我们的 DAL 定义接口

    .Repository 为我们的存储库定义基本接口

  • Company.Data 是 DAL 的具体实现

  • Company.Domain 是域对象和定义存储库接口的位置

  • Company.Repository 是存储库的具体实现

  • Company.Tests 有很多命名空间:

    .Data 测试 DAL,.Data.Mock 模拟它

    .Repository 测试存储库, .Repository.Mock 模拟它们

    .Domain 使用模拟存储库测试域对象

这一切都与 AutoFac 连接在一起

于 2010-05-26T13:16:40.513 回答