Недуги проект-дезориентированного ПО

в 15:34, , рубрики: архитектура, ненормальное программирование, паттерны, паттерны проектирования

Любой знакомый с книгой о паттернах, написанной Бандой Четырёх знает, что паттерны, описанные в книге, представляют собой элегантные решения, проверенные временем. К сожалению, выделение этих паттернов из преемственного кода невозможно, потому что никто не знает, что они предложили эти паттерны, когда писали преемственный код. Поэтому следующий текст представляет из себя паттерны для широких масс. Представленные в этом документе паттерны представляют собой решения, пережившие многих. Наслаждайтесь чтением, но не используйте на практике!

Испепеляющие паттерны (Cremational Patterns)

Далее представлен список из пяти испепеляющих паттернов.

Крайняя нищета (Abject Poverty)
Паттерн крайняя нищета очевиден в случае с ПО, которое настолько сложно тестировать и поддерживать, что это выливается в огромные издержки.

Слепец (Blinder)
Паттер Слепец — решение проблемы без оглядки на будущие изменения в требованиях к проекту. Неизвестно, назван ли паттерн так из-за напрасных переживаний программиста в процессе написания кода или же его желания выдавить себе глаза на стадии поддержки проекта.

Метод заблуждений (Fallacy Method)
Метод заблуждений применяется при обработке крайних случаев. Логика выглядит правильной, но если кто-то пытается протестировать ее, либо если всплывает крайний случай, заблуждение в логике становится очевидным.

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

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

Деструктивные паттерны (Destructural Patterns)

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

Усыновитель (Adopter)
Усыновитель предоставляет приют для заблудших функций. В результате получается огромное цыганское семейство непохожих друг на друга функций. Единственое, что их связывает — Усыновитель.

Бриг (Brig)
Бриг представляет из себя класс-контейнер для плохого ПО. Также известен как модуль.

Компромисс (Compromise)
Паттерн Компромисс используется, чтобы балансировать между скоростью и качеством. Результатом является никому не нужное ПО низкого качества.

Детонатор (Detonator)
Детонатор часто встречается, но частно не замечается. Типичный пример — вычисления, основанные на двузначном представлении года. Эта бомба ждёт своего времени!

Дырявый (Fromage)
Паттерн Дырявый как правило полон дыр. Он состоит из множества маленьких грязных хаков, которые делают невозможной поддержку. Чем старше это решение становится, тем хуже от него пахнет.

Самолётик (Flypaper)
Самолетик написан одним программистом и поддерживается другим. Программист, которому приходится поддерживать самолётик, замечает, что самолётику нехорошо, поэтому как правило катапультируется.

Эпоксидка (ePoxy)
Эпоксидка часто встречается в очень плотно связанные программных модулях. Связность растёт и в какой-то момент начинает казаться, что модули склеены эпоксидной смолой.

Непослушные паттерны (Misbehavioral Patterns)

Море возможностей (Chain of Possibilities)
Море возможностей встречается в огромных, плохо задокументированных модулях. Никто целиком не знает, что делает такой модуль, но его возможности кажутся безграничными. Также известен как Недетерминированный.

Коммандо (Commando)
Коммандо применяется, когда нужно быстро проникнуть в проект, по-тихому сделать свою работу и забыть про него. Коммандо может взломать любую инкапсуляцию для достижения своих целей. И конечно он не берет заложников.

Распылитель (Intersperser)
Распылитель рассеивает куски функционала по системе таким образом, что его становится невозможно тестировать, модифицировать или понимать.

Подстрекатель (Instigator)
Подстрекатель кажется хорошим и качественным, но потихоньку начинает творить хаос на другом конце системы.

Импульс (Momentum)
Импульс растет экспоненциально, увеличивая размеры программы, требования к памяти, сложность и время работы.

Медикатор (Medicator)
Медикатор — огромный временной боров, который своим присутствием заставляет остальные элементы системы работать так, как будто они находятся под сильными седативными препаратами.

Отпускающий грехи (Absolver)
Встречается в системах, разработанных бывшими сотрудниками. С этим ПО связано так много исторически сложившихся проблем, что текущие сотрудники во всем винят бывших сотрудников. Также известен как «Это-не-я-писал»

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

Панегирик (Eulogy)
Панегирик встречается в проектах, учитывающих остальные 22 паттерна. Также известен как Послесмертный.

Метод стихийной разработки (Tempest Method)
Метод стихийной разработки используется в последние несколько дней перед выпуском ПО. Характеризуется отсутствием комментариев и частым использованием Детонаторов.

Восставший из Ада (Visitor From Hell)
Представляет из себя отсутствие проверок на границы массивов. Считается, что как минимум один блок в системе имеет встроенную поддержку Восставшего из Ада, который перезапишет критичные данные.

P.S. Читателю предлагается поучаствовать в корректировании перевода, а также внести свои антипаттерны и их описания (на русском, само-собой). Ваши pull-requests отправляйте сюда: github.com/allaud/resign_patterns

Автор: a11aud

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js