在使用ddd时发现,不知道该如何实现 删除
操作,因为在标准 ddd 的设计中,repository 中只有 save、load 两个方法,难道我们要用 save 方法来执行 删除操作?
在 udidahan 的一篇文章中指出:”不要删除“,
而是搞清楚客户为什么需要”删除“操作,而后面的评论中,建议使用归档/存档来代替”删除“。
个人看法,以现状而言,大可不必过度考虑ddd中是否应该存在删除操作,因为大家对删除操作已经有了共识,
删除操作属于业务中的一部分,或者我们将删除看做订单的另一种状态:”已删除状态”(逻辑删除),
所以大胆的使用”delete“吧。
更多删除场景
对于一个电商系统来说,用户有:
- 在移动端删除订单的操作,但仍可以在PC端看到该订单;
- 在PC端删除的操作;
- 客户删除了订单,但是商家仍可以看到订单;
- 商家删除了订单,运营仍可以看到订单;
以上删除操作,我们可以为其命名为:user_delete、seller_delete,在数据库中,用 user_deleted、seller_deleted 标记删除。
参考
- https://udidahan.com/2009/09/01/dont-delete-just-dont/
- https://stackoverflow.com/questions/19962988/from-crud-to-ddd
- https://stackoverflow.com/questions/11756146/doing-entity-delete-in-ddd