API 基础设施 类 应该是 DDD 中域的一部分吗?
Should API infrastructure classes be part of the domain in DDD?
我开发的后端应用程序公开了 REST API,并且我(尝试)在我的项目中使用领域驱动设计。
REST API 在一组固定的域 class 上运行。对于域中的每个聚合根,都有一个单独的 REST 端点。然而,尽管付出了所有努力,但在某些情况下,新的 classes 并非源自域 classes(基础设施 classes)出现,例如:
- a class 批量操作的保持状态
[{"id": 1, "status": "success"},{"id": 2, "status": "failure", "message": "detailed message"}]
- a class 包含用户选择的列
[{"column": "id", "order": 1}, {"column":"created", "order": 2 }]
现在有两个选择:
- 让 REST API 公开不属于域的 classes 是否可以?
- 或者这些 class 是否应该成为域的一部分?
您不应尝试直接针对您的域模型构建 REST API。对于这样一个会扰乱您的域模型的接口,您需要承担很多责任。例如。事务控制、安全性、输入验证是您可能需要的东西,但不属于域模型。
这就是应用程序服务的用途。
围绕包含应用程序服务的域模型构建一个薄层(通常称为服务层)。应用服务是领域模型的直接客户。它们通常围绕 用例 而不是聚合进行组织。现在您的 REST API 是应用服务的直接客户端,而不是域模型。
您提到的两个 类 也可以很好地融入服务层。
编辑:
请注意,在使用六边形架构(非常适合 DDD)时,服务层与持久层不同。服务层使用持久层将聚合加载和保存到数据库。
我开发的后端应用程序公开了 REST API,并且我(尝试)在我的项目中使用领域驱动设计。
REST API 在一组固定的域 class 上运行。对于域中的每个聚合根,都有一个单独的 REST 端点。然而,尽管付出了所有努力,但在某些情况下,新的 classes 并非源自域 classes(基础设施 classes)出现,例如:
- a class 批量操作的保持状态
[{"id": 1, "status": "success"},{"id": 2, "status": "failure", "message": "detailed message"}]
- a class 包含用户选择的列
[{"column": "id", "order": 1}, {"column":"created", "order": 2 }]
现在有两个选择:
- 让 REST API 公开不属于域的 classes 是否可以?
- 或者这些 class 是否应该成为域的一部分?
您不应尝试直接针对您的域模型构建 REST API。对于这样一个会扰乱您的域模型的接口,您需要承担很多责任。例如。事务控制、安全性、输入验证是您可能需要的东西,但不属于域模型。
这就是应用程序服务的用途。
围绕包含应用程序服务的域模型构建一个薄层(通常称为服务层)。应用服务是领域模型的直接客户。它们通常围绕 用例 而不是聚合进行组织。现在您的 REST API 是应用服务的直接客户端,而不是域模型。
您提到的两个 类 也可以很好地融入服务层。
编辑:
请注意,在使用六边形架构(非常适合 DDD)时,服务层与持久层不同。服务层使用持久层将聚合加载和保存到数据库。