Антишаблон является общим ответом на повторяющуюся проблему , которая, как правило , неэффективна и рискует быть крайне непродуктивными. [1] [2] Термин, придуманный в 1995 году компьютерным программистом Эндрю Кенигом , [3] [4] был вдохновлен книгой « Шаблоны проектирования» , в которой выделяется ряд шаблонов проектирования в разработке программного обеспечения, которые авторы считают очень надежными. и эффективно.
Термин был популяризирован тремя годами позже в книге AntiPatterns , которая распространила его использование за пределы области проектирования программного обеспечения, чтобы неформально относиться к любому обычно заново изобретаемому, но плохому решению проблемы. Примеры включают паралич анализа , программирование культа карго , марш смерти , групповое мышление и привязку к продавцу .
Определение [ править ]
По словам авторов Design Patterns , есть два ключевых элемента в анти-шаблоне, которые отличают его от плохой привычки, плохой практики или плохой идеи:
- Антипаттерн - это обычно используемый процесс, структура паттерна действий, который, несмотря на то, что изначально кажется подходящим и эффективным ответом на проблему, имеет больше плохих последствий, чем хороших.
- Существует другое решение проблемы, которую пытается решить анти-шаблон, которое задокументировано, воспроизводимо и доказано, что оно эффективно там, где анти-шаблон не действует.
Примеры [ править ]
Социальные и деловые операции [ править ]
Организационная [ править ]
- Аналитический паралич : проект, остановившийся на этапе анализа разработки и неспособный получить поддержку ни для одного из потенциальных планов его реализации.
- Навес для велосипедов : придание непропорционально большого веса мелочам
- Передовой край : использование передовых технологий, которые все еще не протестированы или нестабильны, что приводит к перерасходу средств, недостаточной производительности или задержке доставки продукта.
- Апатия стороннего наблюдателя : явление, при котором люди с меньшей вероятностью предложат или не предложат помощь нуждающемуся человеку в присутствии других.
- Дойная корова : прибыльный устаревший продукт, который часто приводит к самоуспокоенности по поводу новых продуктов.
- Дизайн комитетом : результат наличия многих участников в дизайне, но не объединяющего видения.
- Эскалация обязательств : неспособность отменить решение, когда оно оказывается неправильным.
- Групповое мышление : коллективное состояние, при котором члены группы начинают, часто неосознанно, думать одинаково и отвергать разные точки зрения.
- Управление по целям : Управление, работающее с исключительным вниманием к количественным критериям управления, таким как количество продаж, когда они не являются необходимыми или их приобретение обходится слишком дорого.
- Микроменеджмент : неэффективные результаты, проистекающие из чрезмерного наблюдения, надзора или другого практического участия руководства.
- Моральный риск : изоляция лица, принимающего решения, от последствий его решения.
- Управление грибами : держать сотрудников «в темноте и кормить навозом» (также «оставлять тушиться и, наконец, консервировать») в отношении решений, принимаемых руководством.
- Принцип Питера : постоянное продвижение в остальном хорошо работающих сотрудников до должности, для которой они не подходят, с обязанностями, которые они некомпетентны в выполнении, где они остаются на неопределенный срок [5]
- Управление чайкой : управление, при котором менеджеры взаимодействуют с сотрудниками только тогда, когда возникает проблема, когда они «прилетают, создают много шума, обрушиваются на всех, не решают проблему, а затем улетают».
- Stovepipe или Silos : организационная структура изолированных или полуизолированных команд, в которой слишком много коммуникаций происходит вверх и вниз по иерархии, а не напрямую с другими командами в организации.
- Приведение типов : закрепление успешных сотрудников на слишком безопасных, узко определенных, предсказуемых ролях, основанных на их прошлых успехах, а не на их потенциале.
- Привязка к поставщику : чрезмерная зависимость системы от компонента, поставляемого извне.
Управление проектом [ править ]
- Телега впереди лошади : слишком много ресурсов сосредоточено на одной стадии проекта вне его последовательности.
- Смертельный марш : проект, сотрудники которого, ожидая его провала, вынуждены продолжать, часто с большим переутомлением, менеджмент, отрицая возможный провал проекта [6].
- Правило девяноста девяноста : тенденция недооценивать время, необходимое для завершения проекта, когда он «почти готов».
- Излишняя инженерия : трата ресурсов делает проект более надежным и сложным, чем это необходимо.
- Расползание объема: неконтролируемые изменения или непрерывный рост объема проекта, или добавление новых функций в проект после того, как исходные требования были составлены и приняты (также известное как постепенное изменение требований и расползание функций )
- Дым и зеркала : демонстрация нереализованных функций, как если бы они уже были реализованы.
- Закон Брукса : добавление дополнительных ресурсов в проект для увеличения скорости, когда проект уже замедлен из-за накладных расходов на координацию.
- Позолота : продолжение работы над задачей или проектом после того момента, когда дополнительные усилия не добавляют ценности.
Программная инженерия [ править ]
Разработка программного обеспечения [ править ]
- Инверсия абстракции : не раскрытие реализованной функциональности, необходимой вызывающим функциям / методу / конструктору, так что вызывающий код неудобно повторно реализует ту же функциональность в терминах этих вызовов.
- Неоднозначная точка зрения : представление модели (обычно объектно-ориентированный анализ и проектирование (OOAD)) без указания ее точки зрения.
- Большой комок грязи : система без узнаваемой структуры
- База данных как IPC : использование базы данных в качестве очереди сообщений для обычного межпроцессного взаимодействия, где подойдет гораздо более легкий механизм.
- Эффект внутренней платформы : система настолько настраиваема, что становится плохой копией платформы разработки программного обеспечения.
- Входной кладж : неспособность указать и реализовать обработку возможно недопустимого ввода
- Раздутие интерфейса : сделать интерфейс настолько мощным, что его будет чрезвычайно сложно реализовать.
- Волшебная кнопка : форма без динамической проверки или помощи при вводе, например раскрывающиеся списки
- Опасность гонки : неспособность увидеть последствия событий, которые иногда могут мешать друг другу.
- Система дымовых труб : сложно обслуживаемая совокупность плохо связанных компонентов.
Объектно-ориентированное программирование [ править ]
- Анемичная модель предметной области : использование модели предметной области без какой-либо бизнес-логики . Объекты модели предметной области не могут гарантировать их правильность в любой момент, потому что их логика проверки и изменения находится где-то снаружи (скорее всего, в нескольких местах). Мартин Фаулер считает это антипаттерном, но некоторые не согласны с тем, что это всегда антипаттерн. [7]
- Вызов super : Требование подклассов для вызова переопределенного метода суперкласса
- Проблема Круга-эллипс : подтипирование значения_переменных типов на основе ценностного подтипа
- Циклическая зависимость : введение ненужных прямых или косвенных взаимозависимостей между объектами или программными модулями.
- Постоянный интерфейс : использование интерфейсов для определения констант
- Божественный объект : сосредоточение слишком большого количества функций в одной части дизайна (классе).
- Помойка Объекта : Многократные объекты, состояние которых не соответствует (возможно неявному) контракту для повторного использования
- Объектная оргия : неспособность должным образом инкапсулировать объекты, разрешающие неограниченный доступ к их внутренним компонентам.
- Полтергейсты : объекты, единственной целью которых является передача информации другому объекту.
- Последовательная связь : класс, методы которого должны вызываться в определенном порядке.
- Шаблон Singleton : этот шаблон проектирования обеспечивает взаимосвязь и считается плохим решением.
- Проблема йо-йо : структура (например, наследования), которую трудно понять из-за чрезмерной фрагментации.
Программирование [ править ]
- Случайная сложность : задачи программирования, которые можно решить с помощью более совершенных инструментов (в отличие от существенной сложности, присущей решаемой проблеме).
- Действие на расстоянии : неожиданное взаимодействие между далеко разнесенными частями системы.
- Якорь лодки : удержание части системы, которая больше не используется
- Ожидание при занятости: потребление ресурсов ЦП в ожидании чего-либо, обычно путем повторной проверки вместо обмена сообщениями.
- Ошибка кеширования : вы забыли очистить кеш, содержащий отрицательный результат (ошибку), после того, как условие ошибки было исправлено.
- Культ карго : использование шаблонов и методов, не понимая, почему
- Кодирование по исключению : добавление нового кода для обработки каждого особого случая по мере его распознавания.
- Шаблон проектирования : использование шаблонов само по себе называется анти-шаблоном, что является признаком того, что система не использует достаточно абстракции [8]
- Скрытие ошибки : перехват сообщения об ошибке до того, как его можно будет показать пользователю, при этом либо ничего не отображается, либо отображается бессмысленное сообщение. Этот анти-узор также называется рисунком подгузника . Также может относиться к стиранию трассировки стека во время обработки исключений, что может затруднить отладку.
- Жесткий код : встраивание предположений о среде системы в ее реализацию
- Код лазаньи : программы, структура которых состоит из слишком большого количества уровней наследования.
- Поток лавы : сохранение нежелательного (избыточного или некачественного) кода, потому что его удаление слишком дорого или имеет непредсказуемые последствия [9] [10]
- Последовательность переключения цикла : кодирование набора последовательных шагов с помощью переключателя в операторе цикла.
- Магические числа : включение необъяснимых чисел в алгоритмы
- Волшебные строки : реализация предположительно маловероятных сценариев ввода, таких как сравнение с очень конкретными строками, для маскировки функциональности.
- Повторение : повторное написание кода, содержащего повторяющиеся шаблоны и подстроки; избегать с помощью один раз и только один раз (принцип абстракции)
- Съемка мессенджера : выброс исключений из области действия плагина или подписчика в ответ на допустимый ввод, особенно когда это приводит к сбою внешней области.
- Операция с дробовиком : разработчик добавляет функции в кодовую базу приложения, которые охватывают множество разработчиков или реализаций за одно изменение.
- Программный код : хранение бизнес-логики в файлах конфигурации, а не в исходном коде [11]
- Спагетти-код : программы, структура которых трудно понять, особенно из-за неправильного использования структур кода.
Методологические [ править ]
- Копирование и вставка программирования : копирование (и изменение) существующего кода вместо создания общих решений.
- Золотой молоток : если предположить, что любимое решение универсально (см .: Серебряная пуля )
- Изобретено здесь : тенденция отвергать любые инновации или менее тривиальные решения, исходящие изнутри организации, обычно из-за отсутствия доверия к персоналу.
- Синдром « Не изобретено здесь» (NIH): тенденция к изобретению колеса (неспособность принять существующее адекватное решение).
- Преждевременная оптимизация : кодирование на ранней стадии ради кажущейся эффективности, жертвуя хорошим дизайном, ремонтопригодностью, а иногда даже реальной эффективностью.
- Программирование путем перестановки (или «программирование случайно», или «программирование по совпадению»): попытка приблизиться к решению путем последовательного изменения кода, чтобы увидеть, работает ли оно.
- Новое изобретение квадратного колеса : отказ принять существующее решение и вместо этого принять индивидуальное решение, которое работает намного хуже, чем существующее.
- Серебряная пуля : предположение, что любимое техническое решение может решить более крупный процесс или проблему.
- Разработка, управляемая тестерами : программные проекты, в которых новые требования указываются в отчетах об ошибках.
Управление конфигурацией [ править ]
- Ад зависимостей : проблемы с версиями требуемых продуктов
- Ад DLL : неадекватное управление библиотеками динамической компоновки (DLL), особенно в Microsoft Windows
- Конфликт расширений : проблемы с разными расширениями классической Mac OS при попытке исправить одни и те же части операционной системы.
- Ад JAR : чрезмерное использование нескольких файлов JAR , обычно вызывающее проблемы с версией и расположением из-за неправильного понимания модели загрузки классов Java.
См. Также [ править ]
- Запах кода - признак неправильного программирования
- Запах дизайна
- Список философий разработки программного обеспечения - подходы, стили, максимы и философии для разработки программного обеспечения
- Список инструментов для статического анализа кода
- Программная гниль
- Программное обеспечение принцип Питера
- Модель незрелости возможностей
- ISO / IEC 29110 : Профили жизненного цикла программного обеспечения и рекомендации для очень малых предприятий (VSE)
- Дилемма новатора
Ссылки [ править ]
- ^ Budgen, D. (2003). Разработка программного обеспечения . Харлоу, англ .: Addison-Wesley. п. 225. ISBN 0-201-72219-4.
Как описано в Long (2001), антипаттерны проектирования - это «очевидные, но неправильные решения повторяющихся проблем».
- ^ Скотт В. Эмблер (1998). Шаблоны процессов: построение крупномасштабных систем с использованием объектных технологий . Кембридж, Великобритания: Издательство Кембриджского университета. п. 4. ISBN 0-521-64568-9.
... общие подходы к решению повторяющихся проблем, которые оказываются неэффективными. Эти подходы называются антипаттернами.
- ↑ Кениг, Эндрю (март – апрель 1995 г.). «Паттерны и антипаттерны». Журнал объектно-ориентированного программирования . 8 (1): 46–48.
- ↑ Позднее перепечатано в: Rising, Linda (1998). Справочник по шаблонам: методы, стратегии и приложения . Кембридж, Великобритания: Издательство Кембриджского университета. п. 387. ISBN. 0-521-64818-1.
Антипаттерн похож на образец, за исключением того, что вместо решения он дает нечто, внешне похожее на решение, но не таковое.
- ^ Питер, Лоуренс Дж. (1969), Принцип Питера: Почему дела всегда идут не так ; Книги 1969 Buccaneer, ISBN 9781568491615
- ^ Йордан, Эдвард (1997), март смерти ; ISBN 978-0137483105
- ^ «Модель анемичного домена - это не антипаттерн, это ТВЕРДЫЙ дизайн» . SAPM: Блог курса . 4 февраля 2014 . Проверено 3 января 2015 года .
- ^ «Месть ботаников» .
В мире объектно-ориентированных приложений вы часто слышите о «шаблонах».
Интересно, не являются ли эти шаблоны иногда свидетельством того, что работает человеческий компилятор case (c).
Когда я вижу закономерности в своих программах, я считаю это признаком проблемы.
Форма программы должна отражать только ту проблему, которую необходимо решить.
Любая другая регулярность в коде является признаком, по крайней мере для меня, того, что я использую недостаточно мощные абстракции - часто то, что я создаю вручную расширения некоторых макросов, которые мне нужно написать.
- ^ "Поток лавы" . antipatterns.com . 2 апреля 2017.
- ^ "Недокументированные антипаттерны" потока лавы "усложняют процесс" . Icmgworld.com. 14 января 2002 года Архивировано из оригинала 11 марта 2011 года . Проверено 3 мая 2010 года .
- ^ Пападимулис, Alex (10 апреля 2007). «Мягкое кодирование» . thedailywtf.com . Проверено 27 июня 2011 года .
Дальнейшее чтение [ править ]
- Laplante, Phillip A .; Нил, Колин Дж. (2005). Антипаттерны: идентификация, рефакторинг и управление . Публикации Ауэрбаха. ISBN 0-8493-2994-9.
- Браун, Уильям Дж .; Malveau, Raphael C .; McCormick, Hays W .; Томас, Скотт В. (2000). Хадсон, Тереза Хадсон (ред.). Антипаттерны в управлении проектами . Джон Вили и сыновья . ISBN 0-471-36366-9.
Внешние ссылки [ править ]
Викискладе есть медиафайлы, связанные с антипаттернами . |
- Антипаттерн на WikiWikiWeb
- Каталог антипаттернов
- AntiPatterns.com Веб-сайт книги AntiPatterns
- Модели токсичного поведения
- C Указатель Антипаттерн
- Электронная книга Anti-Patterns
- Модели социального доминирования