2011-03-16 332 views
12

我在讀an article by Dino Esposito on how to test AsyncConrollers in ASP.NET MVC,在那裏他使用了「謙虛對象」模式,但沒有詳細描述。什麼是謙虛對象模式,什麼時候有用?

我沒有太多的運氣谷歌搜索周圍。

那麼,謙卑對象模式是什麼?它什麼時候有用?

+1

如果你正在尋找如何使用VS來實現HO項目,請看看這個。 http://stackoverflow.com/a/19121286/1977871 – VivekDev 2016-01-03 03:15:14

回答

25

a thorough description at xunitpatterns.com。基本上,你把所有的邏輯放到一個單獨的對象中,你可以很容易地測試 - 而你的「Humble Object」成爲你的可測試對象的包裝;這只是謙卑的對象也依賴於難以測試的東西,比如異步服務或GUI類。這個想法是在謙虛的對象中留下如此少量的實際邏輯,以至於你不需要測試它,所以不需要處理測試難以測試的依賴關係。

5

我通常會實現這種作爲Interface這種 - 然後你可以使用一個模擬框架來存根測試,一個IoC框架在運行時注入正確的實現。

下面是從我目前的項目爲例:

public interface IUserInterface 
{ 
    string AskUserWhereToSaveFile(
     string title, 
     FileType defaultFileType, 
     string defaultFileName = null, 
     params FileType[] otherOptions 
    ); 

    string AskUserToSelectFileToLoad(
     string title, 
     FileType defaultFileType, 
     params FileType[] fileTypes 
    ); 

    void ShowError(string title, string details); 
    bool AskUserIfTheyWantToRetryAfter(string errorMessage); 
} 

我的控制器則對IUserInterface一個扶養,而不是一個具體的觀點,這讓我有一個用於測試的存根替換用戶交互。

+0

如果我理解正確,你通常使用這種模式代碼,你沒有控制,所以使用接口wouldnt工作。 – Freek 2012-03-01 18:43:34

+0

@Freek - 這就是我通常使用它的原因。我仍然有一個實現'Interface'的類(或類),但是編碼到Interface會隱藏消費者的所有實現細節。 – 2012-03-06 11:14:55

相關問題