Антипаттерн — это альтернатива паттерну. Паттерн — это эффективный подход к
решению задачи по программированию, предполагающий применение уже готового
шаблона данного решения. Из этого получается, что антипаттерн — это решение
задач по программированию по неэффективному шаблону или методу, который в
результате решает поставленную заданную задачу, но делает это неправильно и
«криво».
Избегать антипаттерны — это хорошая практика для программиста. Так как их
использование решает одну проблему, но обычно создает дополнительные
трудности, которые по значимости не меньше решенной проблемы.
В то же время, использование паттернов также, иногда, приводит к дополнительным
проблемам. Это связано с тем, что при использовании готовых шаблонов для
решения программистских задач, не хватает базы знаний, времени и опыта.
Вот и получается, что использование антипаттернов всегда не рекомендуется, так
как это заведомо проблемное решение, но в то же время и паттерны в неумелых
руках не всегда выдают нужную эффективность. Поэтому использование паттернов и
антипаттернов требует точного обоснования.
Сегодняшняя наша статья посвящена антипаттернам, поэтому приведем несколько
популярных.
Антипаттерны
На самом деле антипаттернов тьма тьмущая. Они возникают, как грибы после дождя.
Это связано с тем, что само программирование не стоит на месте и постоянно растет
объем разработок. Иногда складывается ощущение, что антипаттернов больше чем
паттернов. Их даже делят на 3 основные группы:
- Антипатерны архитекторов;
- Антипаттерны разработчиков;
- Антипаттерны руководства.
Антипаттерны архитекторов
Эти антипаттерны связаны с архитектурными проблемами разработки. Обычно их
провоцируют неправильные решения, принятые архитекторами программы. Их
наличие подразумевает нарушенную или запутанную структуру приложения, а также
нарушенную взаимосвязь между компонентами программы, что в итоге приводит к ее
некорректной работе.
Такие антипаттерны приводят к следующим проблемам:
- скрывается часть функционала, которую считают ненужной для пользователя;
- создается программа, у которой невозможно распознать структуру;
- необоснованно сложный дизайн;
- необоснованно сложный интерфейс, который очень трудно разработать;
- нет возможности предугадать как зависят события от действий пользователей;
- программа решает только узкую задачу и не способна решать более широкие задачи;
- и др.
Антипаттерны разработчиков
Как понятно из названия, эти антипаттерны связаны непосредственно с
разработчиками программного обеспечения, а точнее с их принятыми решениями.
Может сложится такая ситуация, что на уровне архитектуры все продумано неплохо,
но разработчики реализовали все совсем не так.
Такие антипаттерны приводят к следующим проблемам:
- один класс использует большое разнообразие методов;
- использование объектов в неподходящем состоянии;
- когда одни объекты передают данные другим объектам;
- неправильное применение классов и функций;
- лишняя сложность при решении задачи;
- нет возможности проверить работу подпрограммы;
- постоянное добавление новых скриптов, для решения найденных ошибок;
- неправильное наименование переменных, методов, функций и т.д;
- нет возможности удалить код низкого качества, потому что его удаление приводит к фатальным ошибкам;
- запутанная реализация кода;
- нет возможности проводить рефакторинг кода;
- наличие объектов, которые только «притворяются», что содержат какие-то данные;
- неоправданное использование паттернов;
- когда копируются и применяются повторяющиеся скрипты;
- замена функциональности документацией;
- уверенность, что часто используемое решение спасет ситуацию и в это раз;
- уверенность в том, что не сработает известная ошибка;
- слишком ранняя оптимизация кода;
- создаются решения с нуля, при том что есть уже готовые отличные решения задач;
- создается плохое решение, когда есть уже готовое отличное решение;
- ошибки, приводящие к краху программы и невозможности ее реанимировать;
- новый функционал добавляется как отдельное решение вместо того, чтобы обновить старый функционал;
- бессмысленное применение различных библиотек, приводящее к тому, что удалить старые невозможно, а установить новые очень сложно;
- предварительный показ, как будет работать еще ненаписанная функция;
- каждое новое обновление программы требует все больше и больше ресурсов «железа»;
- реализация функций только для демонстрации их наличия;
- и др.
Антипаттерны руководства
Как ни странно, но руководство тоже иногда применяет антипаттерны в своих
решениях. От любого руководителя в первую очередь зависит взаимодействие
между всеми сотрудниками, кто трудится над разрабатываемой программой. Помимо
этого, он отвечает еще за сроки реализации программы, необходимое количество
ресурсов на разработку и за конечный результат.
Поэтому применение антипаттернов руководителем чревато последствиями.
Некоторые проблемы, которые могут от этого возникнуть:
- проект закрывается еще до старта его реализации, так как неправильно расходовались средства и было много потрачено на проектирование и анализ;
- в проект, приносящий реальный доход не финансируются средства на его развитие;
- расходуются большие усилия и финансы на то, чтобы перенести разработку в новое окружение;
- новые улучшения наносят ущерб общему состоянию программы;
- необоснованное улучшение красоты кода приводит к ухудшению качеству программы;
- реализуется решение, даже после того, как было обосновано, что это ошибка;
- когда игнорируется мнение специалиста ниже по статусу;
- слишком жесткое управление;
- не предоставление всей необходимой информации сотрудникам;
- теряется контроль над масштибированием программы;
- полное отсутствие личного вклада в разработку;
- неправильное формирование команды, когда уход одного из ее членов провоцирует остановку разработки, так как все было завязано на этом человеке;
- самостоятельное решение задач, никого не оповещая, как было достигнуто решение;
- и др.
Возможно вам будет интересно почитать статью “Жанр игр «рогалик», что это такое?”
Заключение
Антипаттерны и проблемы идут рядом друг с другом. Антипаттерн — это решение,
которое принял специалист в какой-то конкретной ситуации, чтобы исправить одну
проблему, но по факту эти решения приводят к еще большим проблемам.
Можно сказать, что антипаттерны — это враги программистов и никакой пользы в
себе они не несут. Нехватка времени, спешка и давление заказчика часто
провоцируют их применение. Единственный путь их не применять — это правильно
распределять свое рабочее время и никогда не поддаваться спешки, чтобы делать
все так как надо.