【发布时间】:2020-08-01 14:57:11
【问题描述】:
我尝试为我的应用程序使用 DDD,当创建或编辑聚合根时,我添加了将在 SaveChange on me 存储库中引发的 DomainEvent。
现在我的问题在于删除操作,因为我的实体根具有创建或删除的功能,但删除操作的唯一方法是在存储库上调用删除,就像我在其中一个 CommandHandler 中的代码一样
entity.AddDomainEvent(new NodeRemovedPublicEvent(request.NodeId));
_repository.Delete(entity);
await _repository.UnitOfWork.SaveChangesAsync();
这样我需要记住每次使用_repository.Delete() 时都要创建一个域事件。我不喜欢这种操作,这种情况有最佳实践吗?
编辑 1:(永远不要删除)。 我认为这是最好的方法,以避免删除中的事务问题,ecc ...这样我需要实现逻辑删除。在我的情况下,当根身份被删除(逻辑删除是相同的)时,我需要删除其他实体(逻辑删除)。为此,我需要生成一个域事件。如果我不提出那个事件,我的实体有逻辑删除,而订单实体没有。确实,如果没有该实体,订单实体将无法加载,但我需要知道相关实体已“链接”到逻辑删除的实体。 例如,如果我删除广告用户,并且该用户拥有实体 Food,我需要删除分配给该用户的所有 Food 实体。
【问题讨论】:
标签: asp.net-core entity-framework-core domain-driven-design