Resign Patterns
Проломы проектно-дизориентированного проектирования
ВступлениеЛюбой, кто знаком с книгой о паттернах, написанной той самой Бандой Четырёх, знает, что паттерны, указанные там, представляют собой изящные решения, выработанные годами. К сожалению, извлечь паттерны из имеющегося кода не представляется возможным, потому что авторы этого кода не знали, что они должны были использовать паттерны. Сей труд — собрание паттернов для народа. Паттерны, указанные здесь, представляют собой решения, выдержавшие испытание временем. Желаю вам приятного чтения, но пожалуйста, не вздумайте ими пользоваться!
1. Умерщвляющие паттерны
Ниже представлен список из пяти умерщвляющих паттерна.
1.1. Крайняя Нищета (Abject Poverty)
Паттерн Крайняя Нищета широко встречается в программах, которые настолько трудно тестировать и поддерживать, что это выливается в постоянные превышения бюджета.
1.2. Ослепитель (Blinder)
Этот паттерн — подходящее решение для проблемы без учёта возможных изменений исходных требований. До конца неясным остаётся, назван ли этот паттерн так потому, что инженер надевает шоры во время фазы кодирования, либо потому, что можно сломать глаза во время эксплуатации такого ПО.
1.3. Обманчивый Метод (Fallacy Method)
Паттерн Обманчивый Метод характеризует обработку исключительных ситуаций. Логика выглядит стройной, но если кто-либо побеспокоиться протестировать приложение либо наступит исключительная ситуация, вся обманчивость этой логики вылезает наружу.
1.4. Пробатип (ProtoTry)
Паттерн Пробатип — попытка разработать работающую модель приложения на скорую руку. Естественное желание — переписать Пробатип, учитывая полученные из него уроки, однако сроки поджимают. Пробатип также известен как имеющийся код (legacy code).
1.5. Симплтон (Simpleton)
Симплтон — это жутко навороченный паттерн, используемый для решения самых примитивных задач. Он является точным показателем профессионального уровня тех, кто его использует.
2. Бесструктурные паттерны
Ниже представлен список из семи бесструктурных паттернов.
2.1. Усыновитель (Adopter)
Усыновитель даёт кров функциям-беспризорникам. В результате получается семейство функций, не похожих одна на другую и связанных между собой только через Усыновителя.
2.2. Бригада (Brig)
Бригада — контейнерный класс для кривого ПО. Также известно под названием модуль.
2.3. Компромисс (Compromise)
Паттерн Компромисс используется для создания баланса между сроками разработки и качеством продукта. В результате получается посредственное приложение — и всё равно с опозданием.
2.4. Детонатор (Detonator)
Детонатор очень распространён, но часто остаётся незамеченным. Простой пример — вычисления по последним двум цифрам года. Детонатор где-то рядом, и только и ждёт, чтобы взорваться!
2.5. Сыр (Fromage)
Паттерн Сыр — полон дыр. Этот паттерн состоит из мелких убогих фокусов, которые в итоге сводят на нет переносимость приложения. Чем старше Сыр, тем лучше «пахнет».
2.6. Мухоловка (Flypaper)
Паттерн Мухоловка написан одним инженером и поддерживается другим. Инженер, поддерживающий Мухоловку, вскоре обнаруживает, что вляпался, и он скорее погибнет, чем выпутается.
2.7. Эпоксидка (ePoxy)
Эпоксидка встречается в сильно связанных между собой модулях. Чем больше связь между ними, тем более заметным становится слой Эпоксидки промеж них.
3. Паттерны плохого поведения
Ниже представлен список из одиннадцати паттернов плохого поведения.
3.1. Цепочка Возможностей (Chain of Possibilities)
Цепочка Возможностей встречается в больших, плохо документированных модулях. Никто не знает вообще всей функциональности такого модуля, однако его возможности кажутся бескрайними. Также известен как Недетерминированный.
3.2. Коммандос (Commando)
Коммандос используется, чтобы быстро ворваться в работу и также быстро её сделать. Коммандос может нарушить инкапсуляцию для успешного выполнения своей миссии. Девиз — пленных не брать.
3.3. Распылитель (Intersperser)
Распылитель рассеивает частички функциональности по всей системе, препятствуя тестированию, поддержке или пониманию любой из функций.
3.4. Подстрекатель (Instigator)
Подстрекатель на первый взгляд белый и пушистый, но на самом деле сеет разрушение и хаос в других частях системы.
3.5. Импульс (Momentum)
Импульс растёт экспоненциально, увеличивая требования к памяти и месту на диске, а также сложность приложения и его время выполнения.
3.6. Лекарь (Medicator)
Лекарь — настоящия пожиратель времени, при этом остальные части системы приходиться буквально откачивать и давать успокоительное.
3.7. Не-Виноватая-Я (Absolver)
Паттерн Не-Виноватая-Я встречается в коде, написанном бывшими сотрудниками компании. Так много старых проблем заключено в таком коде, что теперешние сотрудники могут защитить свои наработки от обвинений, утверждая, что именно чужой код — причина всех возникающих ошибок. Также известен под именем Это-Не-Моя-Правка.
3.8. Вклад (Stake)
Паттерн Вклад имеет место в приложениях, созданных инженерами, которые впоследствии получили продвижение по службе. Несмотря на изобилие ошибок в программе, вклад этого инженера слишком велик, чтобы позволить кому-либо начать переписывать этот код, т.к. он является апофеозом технических достижений этого товарища.
3.9. Хвалебная Речь (Eulogy)
Паттерн Хвалебная Речь применяется во всех проектах, которые уже используют остальные 22 паттерна. Также известен как Посмертная Речь.
3.10. Авральный Метод (Tempest Method)
Авральный Метод применяется в последние несколько дней перед сдачей проекта. Данный паттерн характеризуется недостатком комментариев и многократным использованием паттерна Детонатор.
3.11. Гость Из Преисподней (Visitor From Hell)
Паттерн Гость Из Преисподней сродни отсутствию проверки на выход за границы массива во время выполнения. По крайней мере один контрольный цикл для системы неизбежно вызовет Гостя Из Преисподней, который обязательно затрёт жизненно важные данные.
Resign Patterns — оригинал
28 коментарів
Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.