如何在域驱动设计中处理跨域逻辑

时间:2019-07-16 05:53:50

标签: domain-driven-design

我是DDD的新手,我正在尝试在Go REST API项目中使用它。当存在可能跨越领域的逻辑时,我对如何处理这种情况感到非常困惑。

假设我具有以下文件夹结构,其中有两个域(客户和订单):

+.
-- Customer
   +-- service
       +-- http
   +-- usecase
   +-- repository
-- Order
   +-- service
       +-- http
   +-- usecase
   +-- repository

一般来说,假设Order域中存在一个提供创建顺序功能的终结点,那么http服务应充当路由器并调用相应的usecase来处理逻辑通过将订单数据添加到repository(数据库)中。

如果我要添加新的逻辑以使客户在创建订单时会得到一定的reward points,该怎么办?假设用例中有一个CreateOrder函数可以向数据库中创建新订单,但是我应该如何与Customer域进行交互,以便可以向客户添加reward points? / p>

我正在考虑从Order用例函数调用Customer用例函数,但不确定是否会触发circular import问题。

1 个答案:

答案 0 :(得分:3)

在事件驱动的体系结构中,您将使用消息传递来分离系统。

例如,您的奖励系统可以订阅CustomerActivatedEvent并注册新客户以跟踪其奖励。此外,奖励有界上下文可以订阅OrderShippedEvent并进行适当的奖励处理。

通过这种方式,您CustomersOrdering的BC甚至都不了解彼此,但是Rewards BC可以很高兴地奖励各个客户。