DDD.我是否应该修改存储库中的实体



我有一个关于实现DDD和存储库模式的问题。我应该修改存储库中的实体吗?

假设我有一个订单,并希望将该订单标记为已完成。当我看到这一点时,我有两个选择。

    1.
var order _orderRepository.GetById(1);
order.Finish();
_orderRepository.Update(order);

。其中更改将保存到更新调用中的数据库。

阿拉伯数字。

var order _orderRepository.GetById(1);
var finishedOrder = _orderRepository.Finish(order);

。其中更改将保存到 Finish 调用中的数据库。

使用

一种方法比使用另一种方法有什么优势吗?DDD 的方式是什么?

您不应在存储库中修改它。

原因是存储库负责抽象出持久性(即读取/写入数据存储)。

如果你还让它负责某些业务逻辑,你就违反了单一责任原则。

如果您正在执行自动化测试,这也意味着您必须执行集成测试以确保数据库通信/映射正常工作,然后进行单元测试以验证您在其中引入的业务逻辑。

这似乎微不足道。但这只是你第一次违反原则时微不足道的。但是,一个违规通常会导致另一个和另一个,最后是一个不那么容易维护的应用程序:)

类具有混合职责的应用程序也更难导航。每次你想要更新一个功能时,你必须遍历所有层才能找到实际逻辑完成的位置。

使用应用程序层协调一个或多个域对象的行为,域对象应执行所有状态更改,最后存储库应将这些更改保存到数据库或存储域状态的任何位置。

相关内容

  • 没有找到相关文章

最新更新