2010-08-09 175 views
20

我不知道應該在我的存儲庫模式中實現緩存的位置。存儲庫模式 - 緩存

我應該在服務邏輯還是存儲庫中實現它?

GUI - > BusinessLogic(服務) - >數據訪問(庫)

回答

16

我將處理它的庫/數據訪問層英寸理由是因爲它不符合業務層從何處獲取數據,這是存儲庫的工作。然後,存儲庫將根據數據訪問邏輯的情況決定從何處獲取數據,緩存(如果不是太舊)或從實時數據源獲取數據。

這不僅僅是一個業務邏輯問題,而是數據訪問問題。

+0

感謝您的回答! 我認爲實現延遲加載也更好。 – Beni 2010-08-09 17:04:57

35

不要將緩存邏輯直接放入您的存儲庫,因爲這違反了單一責任原則(SRP)和分離關注點。 SRP基本上規定你的課只能有一個改變的理由。如果您將數據訪問和緩存策略的問題混淆在同一個類中,那麼如果需要更改這兩者中的任何一個,則需要觸摸該類。您也可能會發現您違反了DRY原則,因爲很容易將緩存邏輯分散到許多不同的存儲庫方法中,並且如果需要更改其中的任何一種,則最終不得不更改許多方法。

更好的方法是使用Proxy或Strategy模式將緩存邏輯應用於單獨的類型,例如CachedRepository,然後在緩存爲空時根據需要使用實際的以數據庫爲中心的存儲庫。我寫這演示如何實現這一點使用.NET/C#,其中你會發現我的博客,這裏的兩篇文章:

如果你喜歡的視頻,我還描述了模式在Pluralsight的代理設計模式,在這裏:

+0

更多關於這裏的模式:http://deviq.com/repository-pattern/ – ssmith 2016-02-10 03:00:18

+0

我同意你的方法。傳統業務邏輯類繼續使用非緩存存儲庫,新的業務邏輯服務可以使用新的業務邏輯服務。您對現有邏輯的影響較小 – equintas 2017-01-20 09:19:06

+0

這應該是正確答案 – Allie 2017-06-29 07:53:16