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