什么是 Spring Boot MVC 中的 DDD 聚合?

What is DDD's Aggregate in SpringBoot MVC?

假设我有一堆微服务,每个都写在 SpringBoot MVC 上(REST、Controller、Service 等)

谁能解释一下DDD在SpringBoot MVC中的Aggregate是什么?它是控制器吗?或者它是一个特定的微服务,它是其他一些微服务的根?

换句话说,是以控制器端点为根的服务中的聚合吗?或者是将特定 SpringBoot application/service 的微服务子集聚合为它们的入口点?

这里有两件事。

Spring MVC 是在 HTTP 和应用程序内部之间进行转换的边界层。内部是所有 DDD 发生的地方,而不是边界本身

Spring Boot 用于使用所有常用工具引导应用程序并制作可运行的部署单元。

因此,在 DDD 的情况下,HTTP 请求到达 Spring MVC 层,在那里实例化域请求并传递给域核心以执行。然后域响应返回并由 Spring MVC 层转换为 HTTP 响应。

它既不是控制器也不是特定的微服务。

它是域对象的集群,可以被视为一个单元(例如订单及其订单行)(参见 this),由存储库检索、保存和搜索。

spring 框架还提供了一个更专业的 @Component,称为 @Repository 来表示存储库概念(引自其 javadoc):

Indicates that an annotated class is a "Repository", originally defined by Domain-Driven Design (Evans, 2003) as "a mechanism for encapsulating storage, retrieval, and search behavior which emulates a collection of objects".

Teams implementing traditional Java EE patterns such as "Data Access Object" may also apply this stereotype to DAO classes, though care should be taken to understand the distinction between Data Access Object and DDD-style repositories before doing so. This annotation is a general-purpose stereotype and individual teams may narrow their semantics and use as appropriate.

由于我们使用存储库将 JPA @Entity 或 MongoDB @Document 保存到底层数据存储,因此 DDD 聚合更符合它们