2010-07-12 76 views
9

這是一個開放式的問題,但我想徵求SO社區對特質的一些意見;你認爲Squeak/Pharo的特質是一件好事,還是應該遠離它們並改用組合和授權?我問,因爲雖然我知道如何使用它們(感謝Pharo書籍),但我不確定使用它們是多麼可以接受,或者在哪裏可以使用它們,哪裏不是。特質好壞?

回答

6

我不喜歡特質,因爲它們將強大的依賴關係引入代碼。這些依賴關係可以是顯而易見的(一個導入特徵的類,一個需要方法的特徵),但也非常微妙(影響超級方法/實例變量的特徵)。此外,沒有足夠的工具支持性狀。

根據我的經驗代表團在動態類型的面嚮對象語言(如Smalltalk)中提供了一個更好更可重用的設計。

1

事情有利有弊。 Lukas正確地提到了許多缺點:

  • 在代碼中引入強依賴關係。
  • 沒有足夠的工具支持。

雖然第二天可能有一天會消失,但第一天不會。

特徵的目的是爲了防止發生代碼重複,當兩個類不共享除Object以外的超類時,共享一個實例方法。現在,有時代表團可以解決這個問題,但通常情況下它不能。所以,性狀親是:

  • 減少代碼重複。

我在這裏的判斷是缺點超過。我認爲,今天和永遠,代碼重複必然會發生。當代表團不會這樣做時,我甚至可以想象代碼複製並不是那麼有害,因爲它經常在複製代碼片段的不同演化之前。

I think, the best thing to do, as of today, is to keep automated track of code duplication, and always monitor when one end changes while the other doesn't. I'm currently writing a tool that'll keep track of such links, even across repositories. I'll report on it in my blog when it's ready.