Содержание
Предыстория
Когда Майкл Акройд представил цыганский антипаттерн на Object World West в 1996 году, он сравнил преходящее появление, а затем дискретное исчезновение класса цыган с «цыганским
Вагон», который есть один день и исчез на следующий. Изучая модель Акройда, мы хотели передать больше вызывающей функции Цыгана в общем имени антипаттерна. Таким образом, мы чувствовали, что, поскольку полтергейсты представляют собой «беспокойных призраков», которые вызывают «натыкающиеся на ночь типы явлений», этот термин лучше отражает концепцию «поп-ин, чтобы что-то произошло» этого антипаттерна, сохраняя при этом «здесь и сейчас, а затем внезапно исчезнувший» аромат первоначального цыганского имени.
В языке LISP, как и во многих других, существуют определенные программисты, которые с большим удовольствием используют «побочные эффекты» определенных языковых функций для таинственного выполнения ключевых функций в своих системах. Анализ и понимание таких систем практически невозможны, и любая попытка повторного использования считается безумием.
Как и класс «контроллер» полтергейста, использование «побочных эффектов» для выполнения любой принципиальной задачи в реализации является неправильным использованием инструмента языка или архитектуры, и его следует избегать.
Общая Форма
Полтергейсты-это классы с ограниченными обязанностями и ролями в системе, поэтому их эффективный жизненный цикл довольно короток. Полтергейсты загромождают программные разработки, создавая ненужные абстракции; они чрезмерно сложны, трудны для понимания и трудны в обслуживании.
Этот антипаттерн типичен в тех случаях, когда проектировщики, знакомые с моделированием процессов, но новички в объектно-ориентированном проектировании, определяют архитектуру. В этом Антипаттере можно идентифицировать один или несколько классов призраков, которые появляются лишь на короткое время, чтобы инициировать какое-то действие в другом, более постоянном классе. Акройд называет эти классы «цыганскими вагонами» как правило, цыганские вагоны изобретаются как классы контроллеров, которые существуют только для вызова методов других классов, обычно в заранее определенной последовательности. Они обычно очевидны, потому что их имена часто имеют суффикс _manager или _controller.
Антипаттерн полтергейста обычно преднамерен со стороны какого-нибудь новичка-архитектора, который на самом деле не понимает объектно-ориентированную концепцию. Классы полтергейста представляют собой плохие артефакты дизайна по трем ключевым причинам:
Симптомы И Последствия + Типичные Причины + Известные Исключения
Исключений из антипаттерна полтергейста нет.
Перестроить Решение
Охотники за привидениями решают проблему полтергейста, полностью удаляя его из иерархии классов. После их удаления, однако, функциональность, которая была «предоставлена» полтергейстом, должна быть заменена. Это легко сделать с помощью простой настройки для исправления архитектуры.
Ключ состоит в том, чтобы переместить управляющие действия, изначально инкапсулированные в Полтергейсте, в связанные классы, которые они вызвали. Это подробно объясняется в следующем разделе.
Пример
Чтобы более ясно объяснить полтергейст, рассмотрим пример консервирования персиков на рисунке ниже. Мы видим, что класс PEACH_CANNER_CONTROLLER является полтергейстом, потому что:
В этом примере, если мы удалим класс полтергейста, остальные классы потеряют способность взаимодействовать. Больше нет никакой упорядоченности процессов. Таким образом, мы должны поместить такую возможность взаимодействия в оставшуюся иерархию. Обратите внимание, что определенные операции добавляются к каждому процессу таким образом, что отдельные классы взаимодействуют и обрабатывают результаты.
Сопутствующие Решения
«80% — ное решение», обсуждаемое в Антипаттере Blob, приводит к чему-то очень похожему на полтергейст. Представленный класс «координатор» по-прежнему управляет всеми или большей частью функций системы и, как правило, проявляет многие черты полтергейста.
Применимость К Другим Точкам Зрения И Масштабам
Это происходит, когда разработчики проектируют систему так, как они ее реализуют (как правило, на месте своих штанов!), хотя, конечно, это может произойти в результате неспособности правильно спроектировать систему. Является ли это доказательством того, что полтергейст действительно является случаем неудачного управления, остается на усмотрение читателя.
Как и в большинстве антипаттернов развития, как архитектурные, так и управленческие точки зрения играют ключевую роль в первоначальном предупреждении и постоянной борьбе с ними. Именно с архитектурной точки зрения часто распознается возникающий антипаттерн, а благодаря эффективному управлению он должным образом устраняется, если не предотвращается сразу.
Менеджеры должны позаботиться о том, чтобы объектно-ориентированные архитектуры оценивались квалифицированными объектно-ориентированными архитекторами как можно раньше, а затем на постоянной основе, чтобы предотвратить ошибки, вызванные новичками, такие как этот антипаттерн. Заплатите цену за хорошую архитектуру заранее!
https://sourcemaking.com/antipatterns/poltergeists