簡體   English   中英

為什么存儲庫不應該保存事務邏輯?

[英]Why shouldn't a repository hold transaction logic?

擁有一個設計良好的域,具有不相互引用的聚合,定義良好的邊界和具有良好定義的對象引用的聚合對象,為什么在存儲庫中具有事務邏輯(為每個域對象創建存儲庫)是一種不好的做法?

在回答UoW模式之前,請考慮這個問題UoW限制

因為典型的事務通常跨越多個存儲庫。 當您在同一筆交易中銷售所需產品時

  • 減少股票中的元素數量(StockRepository)
  • 創建訂單(OrderRepository)
  • 創建貨件(ShipmentRepository)

你真的希望所有這些都成功或失敗。

即使在每個事務的一個聚合情況下,代碼塊通常如下所示:

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

從技術上講,當某些步驟在存儲庫之外時,如何在存儲庫中實現事務邏輯和鎖定策略?

因為它打破了單一責任原則。 存儲庫是聚合根集合的提供者,而不是事務協調器。 此外,它們的實現位於持久層中,這意味着它們的視野太低,甚至無法意識到商業交易等大圖片問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM