2012-12-06 19 views
0

我正在使用Repository模式,並且已經很長時間了,但有一件事我從未真正找到過很好的解決方案。通常我需要訪問與多個實體相關的數據,而且我無法找到什麼感覺就像在哪裏放置該功能一樣是一個好的解決方案。少數病例:存儲庫模式:在哪裏放置觸及多個實體的功能?

假設在系統中存在具有任務的用戶:

  • 我需要獲取最新的任務,爲每個用戶作爲用戶對任務的配對名單,說的那樣a Dictionary<int, int> GetUsersRecentTask()
  • 我需要爲該月份生成所有用戶及其任務的報告。
  • 我需要生成系統中所有對象的統計信息。

現在通常我只想把它說的用戶資源庫,但它只是感覺不對

我也試過把它放在更高一級的服務,但它只是不覺得正確的數據訪問那裏

那麼我最好放在哪裏。

回答

1

不要將存儲庫模式視爲教條。這只是一個概念。因此,UsersRepository具有GetUsersRecentTask,您將擁有不同的存儲庫,如:具有GetUsersReport(包含任務)的ReportsRepository和具有Get [Object] Stats的StatisticsRepository。

雖然存儲庫模式最初只處理業務對象,但如果您需要「較小」的對象(如視圖模型或報表數據(僅限數據結構)(無行爲)),它仍然是一個很好的模式。因此,要求ReportsRepository提供某個報告是有意義的。

您唯一需要注意的是某些存儲庫處理業務對象,而其他存儲庫處理DTO。