2010-07-12 4 views
9

Это открытый вопрос, но я хотел бы получить некоторые мнения от сообщества SO на Чертах; вы считаете, что черты в Squeak/Pharo - это хорошо, или вы должны держаться подальше от них и вместо этого использовать состав и делегацию? Я спрашиваю, потому что, хотя я знаю, как их использовать (благодаря книге Pharo), я не совсем уверен, насколько приемлемо использовать их или где это нормально, чтобы использовать их, а где нет.Являются ли черты хорошими или плохими?

ответ

6

Мне не нравятся черты, потому что они вводят сильные зависимости в код. Эти зависимости могут быть очевидными (класс, который импортирует признак, признак, который ожидает методы), но также очень тонкий (черта, которая маскирует супер методы/переменные экземпляра). Кроме того, нет адекватной поддержки инструмента для признаков.

По моему опыту Делегация дает намного лучший и многоразовый дизайн на динамически типизированном объектно-ориентированном языке, таком как Smalltalk.

1

Вещи имеют свои плюсы и минусы. Лукас справедливо упоминает многие из минусов:

  • Внедрение сильных зависимостей в код.
  • нет адекватной поддержки инструмента.

Хотя второй может уйти в какой-то день, первый не будет.

Целью признаков является предотвращение дублирования кода, когда два класса, не разделяющие суперкласс, отличный от 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.

 Смежные вопросы

  • Нет связанных вопросов^_^