這是一個開放式的問題,但我想徵求SO社區對特質的一些意見;你認爲Squeak/Pharo的特質是一件好事,還是應該遠離它們並改用組合和授權?我問,因爲雖然我知道如何使用它們(感謝Pharo書籍),但我不確定使用它們是多麼可以接受,或者在哪裏可以使用它們,哪裏不是。特質好壞?
Q
特質好壞?
9
A
回答
6
我不喜歡特質,因爲它們將強大的依賴關係引入代碼。這些依賴關係可以是顯而易見的(一個導入特徵的類,一個需要方法的特徵),但也非常微妙(影響超級方法/實例變量的特徵)。此外,沒有足夠的工具支持性狀。
根據我的經驗代表團在動態類型的面嚮對象語言(如Smalltalk)中提供了一個更好更可重用的設計。
1
事情有利有弊。 Lukas正確地提到了許多缺點:
- 在代碼中引入強依賴關係。
- 沒有足夠的工具支持。
雖然第二天可能有一天會消失,但第一天不會。
特徵的目的是爲了防止發生代碼重複,當兩個類不共享除Object以外的超類時,共享一個實例方法。現在,有時代表團可以解決這個問題,但通常情況下它不能。所以,性狀親是:
- 減少代碼重複。
我在這裏的判斷是缺點超過。我認爲,今天和永遠,代碼重複必然會發生。當代表團不會這樣做時,我甚至可以想象代碼複製並不是那麼有害,因爲它經常在複製代碼片段的不同演化之前。
相關問題
- 1. 質量保證測試的後門API - 好還是壞?
- 2. bitmap.compress破壞圖片質量
- 3. 特質實施
- 4. 駝鹿特質
- 5. 特質指針
- 6. 內特質
- 7. 從特質
- 8. Readline好像壞了
- 9. iFrames壞或不好?
- 10. MVC好壞做法
- 11. ruleML - 好處/壞點?
- 12. NodeJS和GraphicsMagick:resize()破壞圖像質量
- 13. 在對象後面擁有特質有什麼好處?
- 14. 缺少GWT特質
- 15. canEqual()在scala.Equals特質
- 16. javascript中的特質
- 17. 阿爾特性質
- 18. 圈JSON的特質
- 19. RAML特質定義
- 20. 質疑Sequelize(最好是V1.7)
- 21. 更好質量縮略圖
- 22. 物質友好形式?
- 23. 如何強制一個特質來實現另一個特質
- 24. 特質「應用/ Elasticquent特質」未找到laravel5.2和elasticsearch-2.3.2
- 25. 使用另一個特質的PHP特質
- 26. 斯卡拉:讓特質依賴於其他特質
- 27. IDENTITY列 - 好還是壞?
- 28. 多表好還是壞?
- 29. 顯式調用loadView - 好/壞?
- 30. 裸體物件。好或壞