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

http://www.lsd.ic.unicamp.br/~oliva/fun/prog/resign-patterns
  • Перевод
Любой знакомый с книгой о паттернах, написанной Бандой Четырёх знает, что паттерны, описанные в книге, представляют собой элегантные решения, проверенные временем. К сожалению, выделение этих паттернов из преемственного кода невозможно, потому что никто не знает, что они предложили эти паттерны, когда писали преемственный код. Поэтому следующий текст представляет из себя паттерны для широких масс. Представленные в этом документе паттерны представляют собой решения, пережившие многих. Наслаждайтесь чтением, но не используйте на практике!


Испепеляющие паттерны (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
Поделиться публикацией

Комментарии 13

      +3
      Этот перевод куда более качественный, для сравнения (здесь и там):

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

      ПротоПопытка (ProtoTry)
      Пробатип (ProtoTry)

      и тд., особенно позабавила вот эта фраза:

      До конца неясным остаётся, назван ли этот паттерн так потому, что инженер надевает шоры во время фазы кодирования, либо потому, что можно сломать глаза во время эксплуатации такого ПО.

        0
        Я не в качестве упрека указал, а лишь показать альтернативный перевод =)
      +3
      Классику не забудьте — God object
        0
        Adopter есть за него.

        Пробатип — намного лучше из альтернативного перевода.

        Зря не переведён или хотя бы не приведён заголовок оригинала: «Resign Patterns», что можно вольно по смыслу перевести как «Паттерны халтуры» (а если дословно, то «Паттерны не справляющихся со своими обязанностями программистов»).

        А вообще, очень веет Паркинсоном. Особенно, если читать его качественный перевод, в котором понимаешь, что оригинал был ещё лучше.

          0
          Adopter есть за него.

          Я бы их разделил. Adopter представляется эдакой сборной солянкой из всевозможных helper-методов на любые случаи жизни, объединенные каким-нибудь статик-классом.

          А God Object, как следует из названия (object), хранит в себе состояние всего и вся, ну и методы для работы с этим самым всем и вся.
            0
            Ну так пока их не более пары десятков, то не так уж и страшно, отголоски процедурного программирования. Плохо, если их реально становится очень много.
        +3
        Прикольно, но не хватает примеров ко всему.
          +3
          Для этого нужно 4 автора.
          0
          Усыновитель (Adopter)
          Усыновитель предоставляет приют для заблудших функций. В результате получается огромное цыганское семейство непохожих друг на друга функций. Единственое, что их связывает — Усыновитель.

          великолепно
            +1
            Напоминает namespace utils с кучей методов. Впрочем иной раз реально не знаешь куда их запихать и таки обычно утилиты с тройкой другой методов в проекте возникают.
            0
            Остроумная статья, но перевод, простите, ужасен.
            когда писали преемственный код.
            Вы действительно могли бы так сказать в реальной жизни?
            Самолётик (Flypaper)
            Flypaper — это же липкая бумага для ловли мух, какой еще самолетик.
            огромный временной боров
            Что, простите? Нельзя же фразеологизмы переводить дословно.

            Альтернативный перевод из первого комментария действительно хорош.
              0
              От души посмеялся. Спасибо:)

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое