所以我一直在處理最近由不同軟件供應商爲他們的產品提供的幾個API。有時候缺乏一些東西,有時候我只想讓代碼更具可讀性,並且我試圖避免大量的靜態方法,它們不屬於API中「我需要的東西」。因此,我發現自己寫了很多擴展方法。擴展「類」:很好地使用擴展方法並提高代碼可讀性......或難聞的氣味?
然而,因爲有很多的方法,並在保持黨的利益「我」的方法從這些代碼可讀性方面的API對象分開,我想出了這個小珍聞:
public class MyThirdPartyApiExtensionClass {
public static MyThirdPartyApiExtensionClass MTPAEC(this ThirdPartyApiClass value) {
return new MyThirdPartyApiExtensionClass(value);
}
private ThirdPartyApiClass value;
public MyThirdPartyApiExtensionClass(ThirdPartyApiClass extendee) {
value = extendee;
}
public string SomeMethod() {
string foo = value.SomeCrappyMethodTheProviderGaveUs();
//do some stuff that the third party api can't do that we need
return foo;
}
public int SomeOtherMethod() {
int bar = value.WowThisAPISucks(null);
//more stuff
return bar;
}
}
然後我可以做這樣的事情:
string awesome = instanceOfApiObject.MTPAEC.SomeMethod();
和我有一個乾淨的我的東西從他們的分離。
現在我的問題是......這似乎是一個很好的做法,提高了代碼的可讀性......或者這是一個壞主意嗎?這樣做會有什麼不良後果嗎?
聲明: 上面的代碼只是爲了演示這個概念。顯然,在真實的事情中有更好的理智檢查和有用性。
編輯: 我想分離的相同水平可以簡單地做這樣的:
public static class MyThirdPartyApiExtensionClass {
public ThirdPartyApiClass MTPAEC(this ThirdPartyApiClass value) {
return value;
}
public string SomeMethod(this ThirdPartyApiClass value) {
string foo = value.SomeCrappyMethodTheProviderGaveUs();
//do some stuff that the third party api can't do that we need
return foo;
}
public int SomeOtherMethod(this ThirdPartyApiClass value) {
int bar = value.WowThisAPISucks(null);
//more stuff
return bar;
}
}
它基本上是一個適配器模式,在擴展方法的幫助下使代碼更具可讀性。擴展方法在用於此目的時,基本上是適配器模式的改進版本。 – snicker 2009-10-27 17:39:13
我不確定這會實際上起作用。我相信擴展方法要求擴展類聲明爲靜態的。你可能需要兩個類。 – 2009-10-27 17:47:33
我也是相當積極的靜態類不能有非靜態成員。 – 2009-10-27 17:50:54