是否应该在域层中对软删除建模?

时间:2019-06-01 09:20:32

标签: entity domain-driven-design soft-delete

应该在DDD实体中对软删除进行建模,还是应该由存储库的delete方法自行执行此操作而又不会给域模型带来负担?

我不能说这是业务逻辑还是技术问题。

如果是在实体上设置标志或更改状态的领域层问题,那么这意味着可以被软删除的任何对象都是实体,而不是值对象,因为这意味着该对象具有生命循环?

在某些查询中还需要显示软删除的对象,并具有取消删除对象的能力。这是否表明它是业务逻辑并且属于域层?

您还将通过更改实体上的标志并在存储库上调用update方法来处理软删除和取消删除吗?还是在存储库中有单独的删除/取消删除方法?

1 个答案:

答案 0 :(得分:1)

这是一个很好的问题,

它属于存储库,从技术上讲,您的客户端不在乎如何完成删除。即使您在需要记录的银行(合法和合规)中工作,也可以视为技术问题。

但是,它也属于模型:在域方面,拥有称为“已归档”,“已删除”,“已删除”等属性的属性没有错,可以在需要时将其设置为false取消删除。该属性可以作为在对象上应用命令的前提条件进行检查,例如在尝试修改已归档实体的属性时抛出错误。

有时线条模糊,没有完美的答案,请记住,没有好的或坏的模型,只有有用的模型。