2009-04-24 63 views
3

我傾向於迴避擴展方法(在C#中),因爲它違反了軟件工程的「代碼內聚」原則。擴展方法違反了軟件工程原理嗎?

那爲什麼呢?或者我的理解錯誤?

+1

不過要說明爲什麼它會違反「代碼凝聚力」,比如說OO繼承? – 2009-04-24 10:24:52

回答

11

相反,我認爲明智地使用擴展方法提高了代碼的凝聚力,因爲你可以把方法和類做相關任務一起。這種情況與免費(靜態)方法和C++中的Koenig查找沒有區別,.的擴展訪問僅僅是語法糖。

+2

+1,確實如此。它是靜態方法中的語法糖,這就是它應該如何使用的。 – 2009-04-24 10:32:40

8

擴展方法就像您的武器庫中的任何工具。當明智地使用它們時,它們是一個強大的附加組件,使您能夠編寫那些笨拙的東西來表達。使用不佳,他們是一個尷尬的柺杖縫合在一起的東西。

這麼說,我不同意你的說法,這違反了代碼凝聚力 - 我認爲它實際上是完全相反的。如果您沒有擴展方法,那麼您將被迫使用散佈在整個代碼中的實用程序類。

1

我不認爲擴展方法違反代碼凝聚力比一組靜態方法做了。因爲在他們的核心擴展中,方法只是一組靜態方法。 C#和VB.Net編譯器爲它們提供了一個很好的友好語法。

人們已經創造了他們不很長一段時間控制類的靜態實用方法,他們融入完善的工程實踐。