当我想删除实体时,如何确保域的规则完成



假设我有一个订单实体,只有当这个订单没有订单项时,我才能删除它。

在这种情况下,当我实现存储库模式时,我需要一个允许删除实体的方法。所以消费者(例如ASP中的控制器(会这样做:

var order = unitOfWork.Orthers.GetOrderById(1);
unitOfWork.Orders.Remove(order);
unitOfWork.Complete();

这里的问题是消费者总是删除订单,而不检查这是否可能。无论如何,如果不允许,域无法控制或禁止消费者删除订单。

有什么方法可以强制要求消费者不负责确保可以删除订单?

在其他用例中,例如创建订单时,构造函数会确保信息正确,而在更新中,订单只允许在根据规则可能的情况下进行更新。但是在删除订单的情况下,我不知道该怎么做。

谢谢。

有什么方法可以强制要求消费者不负责确保可以删除订单?

据我所知,没有。在不首先检查域模型的情况下,总是可以编写删除项目的代码。

你所能期望的最好的方法是进行测试/检查,以检测程序员何时做了错误的事情,这样你就可以在昂贵的事故发生之前修复它。


也就是说,你可能想回顾一下:不要删除——只是不要。

它可能以这种方式应用:我们从不通过接口删除项目,而是使用";软删除";机制——我们使用更新协议来允许域模型记录这样一个事实,即该订单对业务不再感兴趣。

然后,当我们需要释放资源时,我们会清除一些已软删除的记录子集。

简言之,您剥夺了消费者删除记录的能力,而是将该子集限制在一个经过良好测试的、理解规则的过程中。

最新更新