2012-08-08 63 views
0

我目前工作的一個n層結構具有以下層n層archlitecure:使用TransactionScope或工作單位爲多個服務?

  • 視圖(ASP.net Web應用程序)
  • 經理(策劃服務)
  • 服務(業務層使用工作單位)
  • 庫(數據訪問)

對於現在的經理是調用一個或多個服務來訪問數據,保存數據或做一些其他業務。 服務使用已實施的工作單元和存儲庫,以便在事務中使用服務。

現在我們有一個經理需要調用不同的服務,這些服務應該在一個事務中一起工作。

我的意見是,工作單元調用應該保存在服務中,因爲服務使用存儲庫訪問數據庫。如果我們將工作單元呼叫轉移給經理,則會破壞設計。經理需要參考資源庫。

任何建議如何設計訪問?

謝謝!

+0

難道你不能只使用其他服務來編排服務來替換管理器嗎?這樣編排服務可以保持工作單元...... – 2012-08-08 14:07:43

+0

該架構是用管理器編排多項服務的方法構建的。所以不需要允許服務調用其他服務。 – Rayk 2012-08-08 14:32:12

回答

2

工作單元不是數據訪問模式。它是邏輯事務的表示=它是業務邏輯的一部分,它屬於你的管理器,因爲管理器正在編排來自多個服務的邏輯事務。

您的經理是一個門面(或者我們稱之爲頂級服務) - 它仍然是商業邏輯,如果邏輯操作需要多個低級別服務,它們都應該在單個工作單元中運行。

+0

好的,如果工作單元屬於業務邏輯,爲什麼在存儲庫中實現UnitOfWork的建議?此外,工作單元繼承自DBContext併爲查詢保存DBSets。工作單元的實施可能是錯誤的嗎? – Rayk 2012-08-08 14:36:53

+1

工作單位和存儲庫是具有不同用途的兩種完全不同的模式。在EF方面,'DbContext'是工作單元,'DbSet'是存儲庫。 – 2012-08-08 14:55:36

+0

好的,你的建議是什麼?在管理器中使用DbContext?也許你有我的例子... – Rayk 2012-08-08 14:59:08