2017-10-16 85 views
1

我很確定我對如何實現Repository Pattern有了很好的理解,但是我陷入了關於複雜查詢/方法的決策循環中。存儲庫模式:複雜的方法去哪裏?

如果我想獲得所有在用戶表上具有特定字段值的用戶或用戶,那麼很明顯,它將進入用戶存儲庫。但是,如果我有更復雜的查詢,例如所有完成視頻課程的視頻課程的用戶,該怎麼辦?在我的模型中,這個查詢大約有6個表。

我希望能夠爲我們的存儲庫做一些事情,如if(user.completedVideoRequirement),但我很難說服自己,用戶存儲庫是這個地方。這對我來說似乎是對的,但我可以很容易地將自己說出來。

什麼是正確的方法?

編輯:如果我返回數據庫實體以外的信息(即返回true/false或其他一些int)會怎麼樣。如果這甚至發生在存儲庫級別,或者我應該像if(users.CompletedVideoRequirement.Any())那樣做? 我想這對我來說仍然是在用戶存儲庫上,因爲它是關於用戶的信息,但從技術上講,它也是關於視頻的信息。

+0

你在使用ef嗎?如果是,那麼你應該有一個系統中所有表的上下文。如果是,那麼您可以從一個存儲庫訪問任何具有該上下文的表。它有什麼問題? – cassandrad

回答

1

我的思維過程是「我要回來什麼」?由於這裏的答案是「用戶」,那麼UserRepository確實是正確的回購。
爲了充分利用數據庫的查詢優化功能,您可能會有一百種不同的方式來過濾用戶,這些方式都會在UserRepo中進行。 (好吧,一百可能會過度)

無論何時你需要一個用戶或用戶集合,你應該能夠去UserRepository來獲取它。這就是它的目的,給你的用戶,但你需要他們過濾。

+0

我接受了你的答案,因爲它完全回答了問題的原始表述。另外,我想它會適用於編輯版本。我編輯了這個問題以包含不返回數據庫對象作爲結果的方法(即.t/f,int) – DiscipleMichael