Этот вопрос о SO говорит о том, чтобы исправить то, что OP считал кодом зависти к функциям . Другой пример, где я видел, как цитируется эта изящная фраза, - недавно полученный ответ здесь, в programmers.SE. Несмотря на то, что я добавил комментарий к этому ответу с просьбой предоставить информацию, я подумал, что она поможет программистам после Q & A понять, что означает термин « зависть к функциям» . Пожалуйста, не стесняйтесь редактировать дополнительные теги, если считаете нужным.
refactoring
code-reviews
clean-code
code-smell
Компьютерщик
источник
источник
Ответы:
Зависть к характеристикам - это термин, используемый для описания ситуации, в которой один объект попадает в поля другого объекта для выполнения какого-либо вычисления или принятия решения, вместо того, чтобы просить объект выполнить само вычисление.
В качестве тривиального примера рассмотрим класс, представляющий прямоугольник. Пользователь прямоугольника, возможно, должен знать его площадь. Программист может выставить
width
иheight
поля, а затем выполнять вычисления внеRectangle
класса. С другой стороны ,Rectangle
может держатьwidth
иheight
поле частными и обеспечиваетgetArea
метод. Это возможно лучший подход.Проблема с первой ситуацией, и причина, по которой это считается запахом кода, заключается в том, что он нарушает инкапсуляцию.
Как правило, всякий раз, когда вы обнаруживаете, что интенсивно используете поля из другого класса для выполнения какой-либо логики или вычисления, рассмотрите возможность перемещения этой логики в метод самого класса.
источник
Возможна ситуация, когда можно нормально использовать другие методы класса / структуры - когда ваш класс / структура является контейнером для данных. Обычно есть немного, что вы можете сделать с этими данными без внешнего контекста.
Такие классы могут все еще содержать некоторую внутреннюю логику, но чаще они используются в качестве контейнеров:
@jhewlett в своем ответе ссылается на эту статью, чтобы доказать, что вам не следует широко использовать других учеников, но есть другая ситуация с запахами кода, описанная там с защитниками моего примера:
источник