我是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
问题。
答案 0 :(得分:3)
在事件驱动的体系结构中,您将使用消息传递来分离系统。
例如,您的奖励系统可以订阅CustomerActivatedEvent
并注册新客户以跟踪其奖励。此外,奖励有界上下文可以订阅OrderShippedEvent
并进行适当的奖励处理。
通过这种方式,您Customers
和Ordering
的BC甚至都不了解彼此,但是Rewards
BC可以很高兴地奖励各个客户。