- Случайная сложность (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). Система чья структура едва понятна, особенно из-за неправильной структуры кода
Анти-паттерны программирования
Объектно-ориентированные анти-паттерны
- Тощая объектная модель (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). Структура, которую сложно понять, в силу чрезмерной фрагментации.
Анти-паттерны проектирования программного обеспечения
- Инвертирование абстракции (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). Трудно обслуживаемая система взаимосвязанных компоненитов.
Анти-паттерны анализа
- Апатия наблюдателя (Bystander apathy). Когда требование или дизайнерское решение неверно, но люди которые замечают это ничего не делают, посколько это затрагивает большое число людей.
Анти-паттерны управления
- Смертельный марш (Death March). Каждый знает, что проект является катастрофой за исключением генерального директора. Тем не менее, истина остается скрытой и жизнеспособность проекта искусственно поддерживается до часа Ч (“большого взрыва”). Существует альтернативное определение. На работников оказывается давление с целью работы до позднего вечера и в течение выходных над проектом с нереальными сроками
- Групповое мышление (Group think). В ходе группового обсуждения члены группы избегают высказывать точки зрения вне общепринятой комофртной зоны консенсуса.
- Дым и зеркала (Smoke and Mirrors). Демонстрация того, как будут выглядеть нереализованные функции
- Раздувание программного обеспечения (Software bloat). Разрешение последующим версиям системы требовать все больше и больше ресурсов
Организационные анти-паттерны
- Паралич от анализа (Analysis paralysis). Выделение непропорцио больших затрат на стадию анализа проекта
- Дойная корова (Cash Cow). Выгодный старый продукт, по которому часто оценивают компетентность при разработке новых продуктов.
- Коллективное проектирование (Design Committee). Дизайн, являющийся результатом работы большого числа людей, но обладающиий единой концепцией.
- Экскалация обязательств (Escalation of commitment). Отсутствие возможности отменить решение, если доказана его ошибочность.
- Управление богом-громовержцем (Management by perkele). Авторитарный стиль управления без какой-либо терпимости к инакомыслию.
- Моральный риск (Moral hazard). Изоляция человека, ответственного за решения, от последствий его решения.
- Грибное управление (Mushroom management). Поддержание сотрудников неинформированными или дезыинформированными.
- Дымоход (Stove pipe). Структура, которая поддерживает в основном нисходящий поток данных, но препятствует межорганизационному общению.
- Привязка к производителю (Vendor lock-in). Создание системы чрезмерно зависящей от компонентов поставляемых третьей стороной
Введение в анти-паттерны
В разработке программного обеспечения существует понятие анти-паттернов (anti-pattern). Анти-паттерн – это шаблон разработки, который кажется очевидным, но является неэффективным или далеким от отптимального варианта при использовании на практике.
Термин был придуман в 1995 году Андю Кенигом (Andrew Koenig) вдохновленным книгой Банды Четырех (Gang of Four) Паттерны разработки. Авторы книги разработали концепцию шаблонов проектирования в области разработки программного обеспечения. Этот термин (антипаттерны) получил широкое распространение тремя годами позже вместе с книгой Анти-Паттерны (AntiPatterns), которая вывела использование термина за рамки разработки программного обеспечения. По менению авторов книги, должны присутствовать, по крайней мере, два ключевых элемента для формального отличия анти-паттерна от плохой превычки, плохой практики или плохой идеи:
- Некоторые повторяющиеся шаблоны действия, процесса или структуры, которые изначально кажутся выигрышными, но в конечно счете приводят к худшим результатам по сравнению с получаемой выгодой от их использования
- Преобразованное решение (Refactored Solution), которе четко задокументировано, проверено на практике и повторяем
Обо мне
Теги
- .NET (1)
- Лицензии (1)
- Anti-Patterns (16)
- ASP.NET (3)
- Bug fixes (1)
- C# (5)
- Code Review (4)
- Fun (1)
- Naming (1)
- Refactoring (20)
- Team rules (2)
- Web (2)
