2012-03-23 82 views
0

我一直在考慮使用.NET 4.0緩存功能或通過第三方抽象接口(如this one)在存儲庫級別實現緩存,我剛剛遇到了一個問題,支持兩個用例。選擇性緩存存儲庫對象或數據結果

我的應用程序可能會分成多個區域,例如管理區域和用戶前端(網站前端)。我不希望在管理區域發生任何緩存,管理員應始終顯示最新的刷新數據。

現在,我是否必須重構我的所有存儲庫方法,以接收參數是否返回緩存結果?還有其他選擇嗎?

+1

怎麼樣有一個單獨的存儲庫,「前端」,如果你將使用緩存和管理員,然後你可以沒有參數,我承認這不是一個最佳的解決方案 – cpoDesign 2012-03-23 12:32:03

+0

它實際上並不是一個解決方案與先進的注入邏輯配對IoC容器提供 – mare 2012-03-23 12:33:47

+0

如果您使用Ninject,也可以進行參數注入:) – cpoDesign 2012-03-23 12:59:20

回答

1

您可以在控制器級別執行緩存,而不是在存儲庫。這樣在管理區域控制器中,您將始終查詢存儲庫以獲取最新數據,而在其他人員中,您將緩存結果。如果您絕對需要在存儲庫層對對象進行緩存,則需要額外的參數來指示是否從管理區域創建調用。或者你也可以使用一個DI框架,比如NInject,它允許你將參數從HttpContext傳遞到每個請求生命週期分配的依賴關係。因此,您可以將area RouteData參數注入到存儲庫的構造函數中。

+0

兩個存儲庫?緩存並且不緩存,並通過Ninject DI在它們之間切換?這只是我想到的.. – mare 2012-03-23 12:32:28

0

因爲您使用的是ASP.NET,所以可以應用各種級別的緩存。如果我們已經存在,我不會去重新發明輪子。

我們:

  • ASP.NET服務器的緩存服務器上
  • ASP.NET輸出緩存(在動作用[OutputCache]
  • ASP.NET輸出緩存在客戶端(在使用[OutputCache]動作)

實體框架或其他ORM也可以進行緩存。所以我會說使用已經存在的東西,直到你確定它沒有做到你需要的東西。


UPDATE

如果你有在倉庫做的話,我會建議使用依賴注入的功能注入正確的存儲庫(一個緩存或無緩存)

+0

我知道這些,但我的方案需要緩存在存儲庫級別。 – mare 2012-03-23 12:31:23

+0

@mare我更新了我的答案。 – Aliostad 2012-03-23 12:37:17