Готовый перевод Learning JavaScript Design Patterns / Шаблоны проектирования JavaScript: Антипаттерны

Если паттерн это пример хорошего тона, то антипаттерн - это урок который должен быть выучен. Термин "антипаттерн" был придуман в 1995 году Эндрю Кёнигом (Andrew Koenig) в Novermber C++ Report того года. В отчете Кёнига было два определения антипаттернов. Антипаттерны:

Описывают плохое решение конкретной проблемы, которое приводит к нежелательным результатам.

Описывают, как перейти от данного решения к более правильному.

На эту же тему Александер пишет о трудностях в достижении баланса между хорошим проектом структуры и хорошим контекстом:

Важно знать как о шаблонах проектирования, так и понимать антипаттерны. Укажем причину. При создании приложения, жизненный цикл проекта начинается с написания кода, однако, как только первый релиз выпущен, его необходимо поддерживать. Качество конечного решения будет хорошим или плохим. в зависимости от навыков команды и потраченного времени на проект. Являются ли те или иные решения хорошими, зависит от контекста: "идеальный" замысел может оказаться антипаттерном, если применить его в несоответствующем контексте.

Подводя итог, антипаттерны являются настольно плохим примером проектирования, что их стоит задокументировать. Примеры антипаттернов:

Засорение глобального пространства имен через определение большого количества переменных в глобальном контексте.

Передача строк вместо функций в setTimeout или setInterval. В результате неявно вызывается eval().

Изменение прототипа класса Object (это особенно опасный антипаттерн)

Использование встроенного JavaScript. Такой код сложнее менять.

Использование document.write вместо операций с DOM, таких как document.createElement. Многие годы document.write использовался не по назначению. Он имеет множество недостатков. Например, если страница с ним успела загрузится перед его выполнением, document.write может перезаписать всю страницу. document.createElement лишен такой проблемы. Мы можем увидеть здесь живой пример в действии. Также document.write не работает в XHTML коде. И это еще одна причина посмотреть в сторону более близких к DOM методов, в частности, document.createElement.

Знание антипаттернов важно для успеха. Распознавая и устраняя антипаттерны, мы мнгновенно улучшим общее качество наших решений.

Переведено на Нотабеноиде
http://notabenoid.org/book/42061/161337

Переводчики: Agnis, turkeevm

Настройки

Готово:

85.71% КП = 1.0

Непереведённые фрагменты будут пропущены.