我对实现DDD和存储库模式有疑问。我应该在存储库中修改实体吗?
假设我有一个订单,想将该订单标记为完成。如我所见,我有两种选择。
var order _orderRepository.GetById(1);
order.Finish();
_orderRepository.Update(order);
...将更改保存在Update调用中的数据库中。
2。
var order _orderRepository.GetById(1);
var finishedOrder = _orderRepository.Finish(order);
...将更改保存到完成调用中的数据库中。
使用一种方法相对于另一种方法是否有优势?这样做的DDD方法是什么?
您不应在存储库中对其进行修改。
原因是存储库负责提取持久性(即,对数据存储的读取/写入)。
如果您还使其对某些业务逻辑负责,则违反了“单一责任原则”。
如果要进行自动化测试,这还意味着您必须进行集成测试以确保数据库通信/映射有效,然后进行单元测试以验证在其中引入的业务逻辑。
看起来微不足道。但这是您第一次违反该原则时的琐事。但是,一次违规通常会导致另一次违规,最终导致应用程序的维护不那么容易:)
类具有混合职责的应用程序也很难导航。每次您要更新功能时,都必须遍历所有层以查找实际逻辑的完成位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句