希望我能解釋這個有點體面,因爲它今天在我的大腦中引發了一個引線。我在C#中學習TDD,所以我仍然試圖重新佈線我的大腦以適應它。TDD:靜態方法,依賴注入,緩存和你!
比方說,我有一個用戶類,該類以前有一個靜態方法來檢索用戶對象(下面簡化)。
public static User GetUser(string username)
{
User user = GetUserFromCache(username);
if(user == null)
{
user = GetUserFromDatabase(username);
StoreObjectInCache(user);
}
return user;
}
所以我想改寫這個使用依賴注入,所以我可以僞造出「GetUserFromDatabase」的方法,如果它需要去那裏。這意味着我必須使該功能不是靜態的。而數據訪問層將從數據庫構建用戶對象,將返回的列映射到對象屬性,而從緩存中檢索將返回真藍色的對象。然而,在一個非靜態的方法中,我不能只說
this = GetUserFromCache(username);
因爲它只是不這樣工作。雖然我絕不是如何與OO一起跳舞的世界專家,但它看起來像我幾乎不得不從緩存中獲取User對象並編寫另一個映射函數,該函數會將返回的User對象屬性存儲到新的用戶實例。
這裏有什麼解決方案?我失蹤的任何OO魔法?是唯一的解決方案重構所有使用工廠,而不是在對象本身具有實例化邏輯?還是我一直盯着這個太久而錯過了一些完全明顯的東西?
感謝您的反饋!至於將緩存邏輯移動到持久性,我很好奇,如果我實例化的對象有一堆對緩存對象的引用,然後緩存的對象退出緩存,會發生什麼情況。我頭疼。 – Chris 2009-03-02 20:32:05
+1:絕對需要更多的關注問題。將緩存作爲應用程序和持久層之間的單獨層是非常有意義的。 – 2009-03-02 20:35:45