我最近一直在采用领域驱动设计原则,但是在实现有界上下文以及上下文和/或其他系统之间的集成时遇到了一些麻烦。
例如,采用以下系统:
仓库/库存系统实体将包括具有诸如“数量”、“位置”等属性的“产品”
在线订购系统实体将包括“Order”、“OrderLine”和“Basket”。它是否也有自己的 Product 实体,该实体具有诸如“价格”之类的属性?
订购系统的一个明确业务规则是不能为缺货的产品下订单,但此信息在库存管理系统中。据我了解,这些是一些可能的实现方式:
当订单被验证时,Order 对象调用库存系统中的服务来检查每个所需产品是否有足够的库存。然而,调用另一个系统的应用程序服务的域感觉有些不对劲,而且如果所有系统都这样做,这将导致一切都紧密耦合和交织在一起。
Ordering System从Stock Keeping System的数据库中读取:Ordering System中的Product实体映射到Ordering System中的Product表和Stock Keeping系统中的Product表的join,或者Ordering System中的Product实体包含另一个名为 StockKeepingProduct 的实体具有来自 Stock Keeping System 的值。这将很容易执行验证,但必须确保订购系统永远不会写入库存系统的数据库。
库存数量被非规范化到订购系统的数据库中,并且每当库存管理系统的库存发生变化时,它都会向订购系统发送一条消息以更新其库存。
可能在内心深处我知道我应该做 3,但我不确定我们是否已经准备好处理如此多的冗余数据和可能的不一致。你对1和2有什么看法?或者你有什么其他建议吗?