2010-10-14 63 views
1

最近我正在竊取一些代碼與外部web api進行通信。 web api是一組GET/POST操作,返回Xml,從我的應用程序通過HttpWebRequest調用並在我的一邊使用Linq to Xml進行操作。導出或注入

有一些形成多個服務的API方法的邏輯分組。我創建了代表這些服務的類。每個服務都必須通過同一組響應頭聯繫相同的基本uri和base。也就是說,我的所有服務類之間都有一系列共享方法。我對這些常用方法執行了Extract Method超類重構,並繼承了我所有的服務類,形成了新的超類。重構所涉及的所有方法都涉及配置到遠程api的底層連接,並處理返回的原始數據,例如將xml反序列化爲POCO。

我剛剛問我爲什麼使用繼承使用從基類,而不是在其注入的方法。坦白說我有沒有真正很好的答案,所以我想知道爲什麼這個問題被問什麼是繼承注射的優點。我知道基本的OO設計原則表示我們應該贊成構造而不是繼承,並且我可以看到如何重構組合,但我不確定這會給我帶來什麼好處。

我的同事說過「不僅更容易測試......而且更容易測試」。我可以看到他的論點,但我想知道更多。希望我已經提供了足夠的信息以獲得明智的迴應。

+0

「支持組合繼承」...? – 2010-10-14 02:11:42

+0

http://haacked.com/archive/2007/12/11/favor-composition-over-inheritance-and-other-pithy-catch-phrases.aspx或http://www.artima.com/lejava/articles /designprinciples4.html根據GoF – 2010-10-14 02:48:28

回答

0

這取決於:)

如果您的孩子類提供speicialisation在基礎類,那麼這有利於繼承,而如果基類提供了更多實用功能的話,我會用成分去。

如果你的孩子班只是適應POCO的網絡調用所需的格式,然後繼承可能是一條路,但與大多數軟件開發一樣,貓可以被許多方式剝皮。

注入它允許您獨立地測試注入的代碼,而不是繼承,您需要子類來測試公共代碼。

希望我能幫到

+0

感謝它是有道理的。效用函數與派生函數是我想到的決定因素。在這種情況下,這些方法大多是實用方法。子類正在填充POCO以便進行Web調用的序列化/反序列化。我猜想一個組合的位,並可能以某種方式擺動。 – 2010-10-14 04:28:40