Что такое «антипаттерн», какие антипаттерны знаешь

Антипаттерн (anti-pattern) — это распространённый подход к решению класса часто встречающихся проблем, являющийся неэффективным, рискованным или непродуктивным.

Poltergeists (полтергейсты) - это классы с ограниченной ответственностью и ролью в системе, чьё единственное предназначение — передавать информацию в другие классы. Их эффективный жизненный цикл непродолжителен. Полтергейсты нарушают стройность архитектуры программного обеспечения, создавая избыточные (лишние) абстракции, они чрезмерно запутанны, сложны для понимания и трудны в сопровождении. Обычно такие классы задумываются как классы-контроллеры, которые существуют только для вызова методов других классов, зачастую в предопределенной последовательности.

Признаки появления и последствия антипаттерна:

  • Избыточные межклассовые связи.
  • Временные ассоциации.
  • Классы без состояния (содержащие только методы и константы).
  • Временные объекты и классы (с непродолжительным временем жизни).
  • Классы с единственным методом, который предназначен только для создания или вызова других классов посредством временной ассоциации.
  • Классы с именами методов в стиле «управления», такие как startProcess.

Типичные причины

  • Отсутствие объектно-ориентированной архитектуры (архитектор не понимает объектно-ориентированной парадигмы).
  • Неправильный выбор пути решения задачи.
  • Предположения об архитектуре приложения на этапе анализа требований (до объектно-ориентированного анализа) могут также вести к проблемам на подобии этого антипаттерна.

Внесенная сложность (Introduced complexity):
Необязательная сложность дизайна. Вместо одного простого класса выстраивается целая иерархия интерфейсов и классов. Типичный пример «Интерфейс - Абстрактный класс - Единственный класс реализующий интерфейс на основе абстрактного».

Инверсия абстракции (Abstraction inversion):
Сокрытие части функциональности от внешнего использования, в надежде на то, что никто не будет его использовать.

Неопределённая точка зрения (Ambiguous viewpoint):
Представление модели без спецификации её точки рассмотрения.

Большой комок грязи (Big ball of mud):
Система с нераспознаваемой структурой.

Божественный объект (God object):
Концентрация слишком большого количества функций в одной части системы (классе).

Затычка на ввод данных (Input kludge):
Забывчивость в спецификации и выполнении поддержки возможного неверного ввода.

Раздувание интерфейса (Interface bloat):
Разработка интерфейса очень мощным и очень сложным для реализации.

Волшебная кнопка (Magic pushbutton):
Выполнение результатов действий пользователя в виде неподходящего (недостаточно абстрактного) интерфейса. Например, написание прикладной логики в обработчиках нажатий на кнопку.

Перестыковка (Re-Coupling):
Процесс внедрения ненужной зависимости.

Дымоход (Stovepipe System):
Редко поддерживаемая сборка плохо связанных компонентов.

Состояние гонки (Race hazard):
Непредвидение возможности наступления событий в порядке, отличном от ожидаемого.

Членовредительство (Mutilation):
Излишнее «затачивание» объекта под определенную очень узкую задачу таким образом, что он не способен будет работать с никакими иными, пусть и очень схожими задачами.

Сохранение или смерть (Save or die):
Сохранение изменений лишь при завершении приложения.

Oct. 22, 2023, Источник

Примеры ответов: