|
接縫(seam)是Michael C. Feathers提出的概念。Feathers在Working Effectively with Legacy Code一書中對接縫的定義如下:
接縫,顧名思義,就是指程序中的一些特殊的點,在這些點上你無需作任何修改就可以達(dá)到改動程序行為的目的。
“接縫”這個詞語不太好理解,根據(jù)我的理解,大約還是依賴點的含義。通過事先找到依賴點,并采取一定方式解除依賴,就能夠改善代碼質(zhì)量,尤其是針對遺留代碼而言。準(zhǔn)確而言,我們尋找接縫以及解依賴,就是為了代碼能夠具有好的可重用性與可擴展性,尤其是當(dāng)我們能解除對其他外部服務(wù)的依賴時,可以帶來程序的可測試性。
最近項目組的同事和我討論了這樣一個滿足可測試性的問題。項目中需要對返回的響應(yīng)信息PlatformResponse進行處理,這些信息會根據(jù)不同的StatusCode,得到不同的提示或出錯信息。為了避免分支語句的判斷,同事利用hash table將StatusCode與提示(出錯)信息進行了映射,然后根據(jù)當(dāng)前的StatusCode就可以返回對應(yīng)的結(jié)果。返回結(jié)果后,還需要調(diào)用外部服務(wù)對消息進行處理,例如消息的輸出。由于之前相關(guān)的類PlatformResponse并沒有提供這一邏輯,相關(guān)服務(wù)要返回消息時,直接返回了PlatformResponse對象,然后再由客戶端根據(jù)當(dāng)前的StatusCode來判斷,輸出相關(guān)的提示信息,所以同事將這些邏輯寫到了擴展方法中,例如定義PlatformResponseHelper靜態(tài)類:
public static class PlatformResponseHelper {private static HashTable<String,String> messageMapping = //此處略
public static void Output(this PlatformResponse response) {
ServiceLocator.Lookup<IMessageWriter>.Write(messageMapping[response.StatusCode]);
}
}
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。