Анти-паттерны программирования

воскресенье, 10 мая 2009 г. · 0 коммент.

  • Случайная сложность (Accidental complexity). Введение ненужной сложности в систему
  • Действие на расстояние (Action at a Distance). Неожиданное взаимодействие сильно разделенными частями системы
  • Слепая вера (Blind faith). Отсутствие проверки правильности исправления ошибки или результата возвращаемого процедурой
  • Корабельный якорь (Boat anchor). Сохранение части системы, которая не используется
  • Занятый волчек (Busy spin). Использование времени процессора в процессе ожидания некоторого события. Обычно это повторяется в постоянной циклической проверке вместо использования сообщений.
  • Ошибка кеширования (Caching failure). Забывание сбросить флаг ошибки, когда ошибка обработана
  • Культ грузового программирования (Cargo cult programming). Использование шаблонов и методов без понимая зачем
  • Кодирование исключениями (Coding by exception). Добавление нового кода для обработки каждого особого случая, как только он найден
  • Сокрытие ошибок (Error hiding). Перехват ошибок преждем чем они будут показаны пользователю. Перехваченые ошибки либо не показываются пользователю, либо отображаются бессмысленные сообщения
  • Обработка исключений (Exception handing). Использование системы обработки исключений для реализации программной логики
  • Жесткий код (Hard code). Встраивание предположение об окружении системы в ее реализации
  • Поток лавы (Lava flow). Поддерживание нежелательного (избыточного или низкокачественного) кода потому, что удаление его либо слишком дорого, либо имеет непредсказуемые последствия
  • Последовательность циклов и переключателей (Loop-switch sequence). Кодирование набора последовательных шагов используя цикл с набором переключателей
  • Волшебные числа (Magic numbers). Включение необъяснимых чисел в алгоритмы
  • Волшебные строки (Magic strings). Включение строковых литералов в код для сравнения, как типы событий и т.д.
  • Мягкий код (Soft code). Хранение бизнес логики в конфигурационном файле вместо хранения в исходном коде
  • Спагетти-код (Spaghetti code). Система чья структура едва понятна, особенно из-за неправильной структуры кода

Объектно-ориентированные анти-паттерны

· 0 коммент.

  • Тощая объектная модель (Anemic domain model). Использование доменной модели, которой нет бизнес логики, что не является объектно-ориетированным программированием, т.к. объект должен содержать и аттрибуты и поведеление
  • Главное зерно (Base bean). Наследование функциональности от утилитного класса вместо делигирования этой функциональности этому классу (утилитному).
  • Вызов базового метода (Call super). Необходимость вызова переопределенного метода родительского класса дочерними классами.
  • Круговая-элипсная проблема (Circle-ellipse problem). Создание ссылочных подтипов на основе подтипов значений.
  • Круговая зависимость (Circular dependency). Введение ненужных непосредственных и опосредованных взаимных зависимостей между объектами или программными модулями
  • Константные интерфейсы (Constant Interface). Использование интерфейсов для опреления констант
  • Божетсвенный объект (God object). Сосредоточение слишком многих функций в одной части системы (класса)
  • Выгребная яма (Cesspool object). Повторное использование объектов, которые не подразумевают повторное использование
  • Оргия объектов (Object orgy). Недостаточное сокрытие внутреннего устройста объекта и предоставление неограниченного доступа к его внутреннему состоянию.
  • Полтергейств (Poltergeists). Объекты, единственным назначением которых является передача информации другому объекту.
  • Последовательное сцепление (Sequential Coupling). Класс требует, чтобы его методы были вызваны в определенном порядке
  • Yo-yo проблема (Yo-yo problem). Структура, которую сложно понять, в силу чрезмерной фрагментации.

Анти-паттерны проектирования программного обеспечения

· 0 коммент.

  • Инвертирование абстракции (Abstraction inversion). Непредоставление требуемых пользователю функций, что приводит к реализации их путем использования более высокоуровневых функций
  • Неоднозначная точка зрения (Ambiguous viewpoint). Предоставление объектной модели без указания точки зрения на нее.
  • Большой ком грязи (Big ball of mud). Система без четко выраженной структуры
  • Газовый завод (Gas factory). Необоснованно сложная структура
  • Выращивание золота (Gold Planting). Продолжение работы над задачей или проектом после отметки, после которой дополнительные затраты вносят дополнительную стоимость и при этом не создают дополнительной ценности
  • Эффект внутренней платформы (Inner platform effect). Система является настолько гибкой и настраеваемой, чтоб выглядит жалким подобием платформы разработки.
  • Игорирование входныз данных (Input kludge). Невозможность указать и реализовать обработку возможно некоректных входных данных.
  • Раздутый интерфейс (Interface bloat). Создание настолько мощного интерфейса, что его сложно реализовать.
  • Волшебная кнока (Magic push button). Реализация бизнес логики непосредственно в коде пользовательского интерфейса, отсутствие абстракции.
  • Опасность гонки (Race hazard). Отсутствие возможности увидеть последствие запросов и событий.
  • Дымоходная система (Stove pipe system). Трудно обслуживаемая система взаимосвязанных компоненитов.

Анти-паттерны анализа

· 0 коммент.

  • Апатия наблюдателя (Bystander apathy). Когда требование или дизайнерское решение неверно, но люди которые замечают это ничего не делают, посколько это затрагивает большое число людей.

Анти-паттерны управления

· 0 коммент.

  • Смертельный марш (Death March). Каждый знает, что проект является катастрофой за исключением генерального директора. Тем не менее, истина остается скрытой и жизнеспособность проекта искусственно поддерживается до часа Ч (“большого взрыва”). Существует альтернативное определение. На работников оказывается давление с целью работы до позднего вечера и в течение выходных над проектом с нереальными сроками
  • Групповое мышление (Group think). В ходе группового обсуждения члены группы избегают высказывать точки зрения вне общепринятой комофртной зоны консенсуса.
  • Дым и зеркала (Smoke and Mirrors). Демонстрация того, как будут выглядеть нереализованные функции
  • Раздувание программного обеспечения (Software bloat). Разрешение последующим версиям системы требовать все больше и больше ресурсов

Организационные анти-паттерны

· 0 коммент.

  • Паралич от анализа (Analysis paralysis). Выделение непропорцио больших затрат на стадию анализа проекта
  • Дойная корова (Cash Cow). Выгодный старый продукт, по которому часто оценивают компетентность при разработке новых продуктов.
  • Коллективное проектирование (Design Committee). Дизайн, являющийся результатом работы большого числа людей, но обладающиий единой концепцией.
  • Экскалация обязательств (Escalation of commitment). Отсутствие возможности отменить решение, если доказана его ошибочность.
  • Управление богом-громовержцем (Management by perkele). Авторитарный стиль управления без какой-либо терпимости к инакомыслию.
  • Моральный риск (Moral hazard). Изоляция человека, ответственного за решения, от последствий его решения.
  • Грибное управление (Mushroom management). Поддержание сотрудников неинформированными или дезыинформированными.
  • Дымоход (Stove pipe). Структура, которая поддерживает в основном нисходящий поток данных, но препятствует межорганизационному общению.
  • Привязка к производителю (Vendor lock-in). Создание системы чрезмерно зависящей от компонентов поставляемых третьей стороной

Введение в анти-паттерны

· 0 коммент.

В разработке программного обеспечения существует понятие анти-паттернов (anti-pattern). Анти-паттерн – это шаблон разработки, который кажется очевидным, но является неэффективным или далеким от отптимального варианта при использовании на практике.

Термин был придуман в 1995 году Андю Кенигом (Andrew Koenig) вдохновленным книгой Банды Четырех (Gang of Four) Паттерны разработки. Авторы книги разработали концепцию шаблонов проектирования в области разработки программного обеспечения. Этот термин (антипаттерны) получил широкое распространение тремя годами позже вместе с книгой Анти-Паттерны (AntiPatterns), которая вывела использование термина за рамки разработки программного обеспечения. По менению авторов книги, должны присутствовать, по крайней мере, два ключевых элемента для формального отличия анти-паттерна от плохой превычки, плохой практики или плохой идеи:

  • Некоторые повторяющиеся шаблоны действия, процесса или структуры, которые изначально кажутся выигрышными, но в конечно счете приводят к худшим результатам по сравнению с получаемой выгодой от их использования
  • Преобразованное решение (Refactored Solution), которе четко задокументировано, проверено на практике и повторяем
Часто уничижительно называмые oxymoronic neologisms, многие среди антипаттернов являются больше чем просто ошибками, разглагольствованиями, нерешаемыми проблемами или плохими практиками. Если это возможно, лучше стараться их избегать. Антипаттерны иногда называются ловушками (pitfalls) или темными шаблонами (dark patterns). Это неформальное использование термина описывает часто изобретаемые повторно плохие решение проблем.

Обо мне

Моя фотография
Кто к нам с чем и зачем, тот от того и того!