gpt4 book ai didi

domain-driven-design - DDD。我应该修改存储库中的实体吗?

转载 作者:行者123 更新时间:2023-12-04 08:20:42 29 4
gpt4 key购买 nike

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

假设我有一个订单并想将该订单标记为已完成。在我看来,我有两个选择。

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

...在 Update 调用中将更改持久保存到数据库。

2.

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

...在 Finish 调用中将更改持久保存到数据库。

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

最佳答案

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

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

如果您还让它负责某些业务逻辑,那么您就违反了单一职责原则。

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

这看起来微不足道。但这只是第一次违反原则时的小事。但是一个违规行为通常会导致另一个违规行为,最后导致一个不容易维护的应用程序:)

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

关于domain-driven-design - DDD。我应该修改存储库中的实体吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34941567/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com