我正在考虑使用 Spring Modulith 构建模块化整体架构,并应用 领域驱动设计 (DDD)。 我有一个关于从多个模块获取数据的问题以及推荐的方法是什么。
首先,这是我的设计方法:
从总体上看,这就是我计划实施该应用程序的方式。
假设这是一个电子商务应用程序,有 customers、catalog、orders 和 inventory 模块(BoundedContexts)。 有AggregateRoots,例如客户、产品、订单、库存。
根据 DDD 建议,AggregateRoot 中仅维护另一个聚合的 ID,而不是对另一个聚合的引用。
//module: customers
class Customer {
private CustomerId id;
//other fileds
}
//module: orders
class Order {
private OrderId id;
private CustomerId customerId;
//other fileds
}
现在的问题是如何构建一个读取模型来显示订单列表以及一些基本的客户详细信息(姓名、电子邮件、电话)。
以下是我能想到的几种方法:
1。查询并合并数据:
优点:
缺点:
2。使用 CQRS:
优点:
缺点:
如果我们可能需要显示主要来自一个 BoundedContext/AggregateRoot 的数据以及来自不同 BoundedContext/AggregateRoot 的一些附加数据,那么您推荐的实现用例的方法是什么?
订阅 Customer 模块中的 OrderCreated 消息,并将订单中所需的数据导入到 Customer schema 中。这种方法避免了不同团队的耦合