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 — оригинал

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn

Схожі статті




28 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.
Паттерн «Оператор Гавно» (Assholement operator, operator= )

Заключается в том, чтоб переопределить operator= и делать в нем все что угодно, только не присваивание.

Паттерн «Контрольный выстрел в голову»

#ifndef FINAL_SHOT_COUNT   #define FINAL_SHOT_COUNT 5#endiffor (int i = 0; i < FINAL_SHOT_COUNT; i++){   try   {      exit(0);   }   catch(...)   {      // try again   }}

Еще реально напрягает паттерн двойной ошибки. Это когда четное количество ошибок в коде дают правильный результат. Отлаживать такое смерти подобно. Короче, все это было бы очень смешно, если бы не было так грустно.

правка «The Simpleton is an accurate indicator of theskill level of its creator.» — Простак является точным показателем профессионального уровня своего создателя

Смех смехом, а ведь эти паттерны применяются почаще «настоящих»:) Особенно Авральный Метод (Tempest Method) и Гость Из Преисподней (Visitor From Hell). Семь раз отмерь — один раз отрежь тоже не редкость

Время от времени возвращаюсь сюда и зачитываю какой-нить подходящий по ситуации паттерн — народ гогочет, ибо очень метко написано.

«семь раз отмерь» — не так банально конечно, но у некоторых товарищей если условия местами поменять можно раз в 5 короче и понятней сделать

Не понял смысла «семь раз отмерь». Неужели кто-то сможет сделать даже приблизительное убожество? А паблик Морозов — супер!

3.2. Коммандос (Commando) — рыдал

Не впечатлило... вот семь раз отмерь — это да...

супер. уже распечатываю и вешаю на стенку. до этого паблик морозов был любимый, сейчас почитаю, может еще что на вооружение возьму.

12 Breeds

В младших классах я считал, что по-английски «бред сивой кобылы» будет «breed of a sieve cable»:) Да, статья ничего такая, можно переводить

[offtop] 2Скакунов Александр: Здається, ще ніхто не перекладав це: 12 Breeds of Client and How to Work with Them.Правда не знаю чи може воно стати стане другим Resign patterns... [/offtop]

Много смеялся. Душевное спасибо.

Возможно. Тем не менее, я не уверен в качестве твоего перевода. Вот простой пример: выражение в тексте оригинала «real time hog» ты переводишь как

свинья,... в реальном времени

Time hog — устойчивое выражение, означает «пожиратель времени». Real здесь относится ко всему этому выражению, а не к real time, как хочется верить тебе и Google Translate:) Короче, следующая переводная статья — с тебя;)

Неправильный перевод 2.2:) На самом деле brig — это здесь «гауптвахта». «Контейнер для плохо себе ведущего ПО»...:) Medicator — это инструмент для введения лекарства в ткани. То есть «Медикатор — это свинья, кушающая все ресурсы в реальном времени, так что все остальные части системы выглядят все равно как под седативами»:)

Супер, особенно понравился перевод «эпоксидка»::) Вроде бы нигде не указан оригинал? http://www.lsd.ic.unicamp.br/~...

Список оригинальных (пародируемых) шаблонов есть на википедии

Адекватно перевести названия все равно не получится — либо потеряется смысл. Вывод — учим язык;)

Только перевод названий так себе: — Хотя лучше, может быть, и нельзя было. В оригинале часть «смеха» там в каламбурах с названиями (Template Method/Tempest Method, Visitor/Visitor From Hell, Mediator/Medicator и т.п.)

...А есть ещё паттерны такого же программирования. Навскидку, я помню два: 1) public Морозов — всё, что унаследовал от base, делает public2) семь раз отмерь — один раз отрежь: if (x == 0) if (x == 0) if (x == 0) if (x == 0) if (x == 0) if (x == 0) if (x == 0) DoSomething ();

а-а-а-а-ааааааааааааааа:)

Огромное спасибо — просто БОМБА!

Підписатись на коментарі