【发布时间】:2013-04-18 23:29:00
【问题描述】:
Jimmy Nilsson 的应用 DDD 和模式一书中的示例:
假设我想删除某个 OrderLine 引用的 Product,我的意思是从数据库中删除,为什么?
可能是因为系统运行时间长,用户想清理一些旧的产品,如何解决?
读过这本书的人可能还有一个问题,为什么作者选择不像为客户实体拍摄产品快照?
【问题讨论】:
标签: design-patterns domain-driven-design
Jimmy Nilsson 的应用 DDD 和模式一书中的示例:
假设我想删除某个 OrderLine 引用的 Product,我的意思是从数据库中删除,为什么?
可能是因为系统运行时间长,用户想清理一些旧的产品,如何解决?
读过这本书的人可能还有一个问题,为什么作者选择不像为客户实体拍摄产品快照?
【问题讨论】:
标签: design-patterns domain-driven-design
由于订单实际上是不可变事件,因此从数据库中删除产品不应影响该产品的现有订单。将适用的产品数据直接复制到订单行项目中通常是个好主意——这可能是 Jimmy 书中所说的“快照”,但我不确定。此外,如果您使用的是关系数据库并且对产品 ID 有外键约束,那么您应该避免删除产品或移除约束。
【讨论】:
OrderLine,因为通常情况下,价格在供应商价目表中维护。因此,最简单的方法是同时消除数据级别的高“耦合”。