【问题标题】:Deleting an object referenced from another agregate删除从另一个聚合引用的对象
【发布时间】:2013-04-18 23:29:00
【问题描述】:

Jimmy Nilsson 的应用 DDD 和模式一书中的示例:

假设我想删除某个 OrderLine 引用的 Product,我的意思是从数据库中删除,为什么? 可能是因为系统运行时间长,用户想清理一些旧的产品,如何解决?
读过这本书的人可能还有一个问题,为什么作者选择不像为客户实体拍摄产品快照?

【问题讨论】:

    标签: design-patterns domain-driven-design


    【解决方案1】:

    由于订单实际上是不可变事件,因此从数据库中删除产品不应影响该产品的现有订单。将适用的产品数据直接复制到订单行项目中通常是个好主意——这可能是 Jimmy 书中所说的“快照”,但我不确定。此外,如果您使用的是关系数据库并且对产品 ID 有外键约束,那么您应该避免删除产品或移除约束。

    【讨论】:

    • 抱歉这个不完整\不准确的问题,主要问题不在于删除过程本身,我知道外键约束。问题出在演示文稿中,如果产品实际上被删除并且客户正在查看他的旧订单,系统将在哪里获得有关他在其中一个订单中购买的产品的详细信息,所以最重要的问题实际上是第二个一、为什么他没有选择将产品数据复制到订单行项目,请评论一下这个和视图问题?
    • 我不确定他为什么不这样做,这可能是为了解释的目的——展示实现关系的不同方式。在您的场景中,我认为您应该将所有适用的数据复制到订单行,以便可以出于演示目的访问它。无论产品是否被完全删除,这都有好处。
    • 我同意 eulerfx 的观点:另一个问题可能是定价。这也会随着时间而变化,因此您要删除的同一历史产品很可能会随着时间的推移而具有不同的价格。价格不是问题的原因是它已被非规范化为OrderLine,因为通常情况下,价格在供应商价目表中维护。因此,最简单的方法是同时消除数据级别的高“耦合”。
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2018-08-12
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多