为什么存储库不应该保存事务逻辑?

时间:2013-12-17 17:17:49

标签: design-patterns architecture transactions domain-driven-design

拥有一个设计良好的域,其中聚合不会相互引用,定义良好的边界和具有明确定义的对象引用的聚合对象,为什么在存储库中包含事务逻辑(为每个域创建一个存储库)是一种不好的做法宾语)?

在回答UoW模式之前,请考虑这个问题UoW limitation

3 个答案:

答案 0 :(得分:4)

因为典型的事务通常跨越多个存储库。当您在同一笔交易中销售所需产品时

  • 减少股票(StockRepository)中的元素数量
  • 创建订单(OrderRepository)
  • 创建货件(ShipmentRepository)

你真的希望所有这些成功或失败。

答案 1 :(得分:2)

即使在每个事务的一个聚合情况下,代码块通常如下所示:

 Order order = orderRepository.findBy(orderId);(1)
 order.doSomething();
 orderRepository.store(order);//or omitted with uow

技术上,当某些步骤在存储库之外时,如何在存储库中实现事务逻辑和锁定策略?

答案 2 :(得分:0)

因为它打破了单一责任原则。存储库是聚合根集合的提供者,而不是事务协调器。此外,它们的实现位于持久层中,这意味着它们的视野太低,甚至无法意识到商业交易等大图片问题。