Когда автор Адди Османи написал первую версию книги Learning JavaScript Design Patterns в 2012 году, JavaScript еще начинал завоевывать популярность как язык для создания сложных веб-приложений. С тех пор JavaScript претерпел значительные изменения и превратился в один из самых популярных языков программирования, используемый для разработки от простых скриптов до сложных веб-приложений. Если вы совершенствуетесь в JavaScript — не пропустите второе издание этой книги в переводе от издательства БХВ Петербург.


По традиции наших рецензий, начнем пост со ссылки на страницу книги «Изучаем паттерны проектирования JavaScript: руководство для разработчиков JavaScript и React, 2-е издание» на сайте БХВ Петербург.
Напомним, на все книги по компьютерным технологиям от издательств «БХВ Петербург», «Alist» и «Фолиант» доступен промокод SSPSOFT на скидку 25% как подарок читателям Хабра от нашего блога. 

Когда автор — ведущий сотрудник в команде Google Chrome

Адди Османи  — опытный software engineer и один из ведущих специалистов в Google, работающий в команде Chrome. Он известен в англоязычном мире веб-разработки благодаря своим статьям, докладам и книгам, в которых объясняет ключевые принципы оптимизации веб-приложений и делится передовыми подходами к архитектуре и производительности. Книги Османи востребованы благодаря его способности анализировать новые тенденции и предлагать работающие решения.

Сегодняшний мир веб-разработки сильно отличается от версии образца 2010-х: в язык JavaScript были добавлены такие возможности, как модули, promises, async/await, которые изменили подход к архитектуре приложений. Становление таких фреймворков, как React, повлияло на восприятие разработчиками вопросов поддержки и масштабируемости, что вызвало необходимость применения новых, современных паттернов, учитывающих все эти изменения.

В ответ на эту эволюцию, Адди Османи выпустил второе издание Learning JavaScript Design Patterns, в котором предлагает разработчикам освоить актуальные паттерны проектирования, подходящие как для JavaScript-кода, так и для приложений на React. Книга охватывает более двадцати ключевых паттернов, необходимых для создания поддерживаемых и масштабируемых приложений. В ней освещены не только классические паттерны, но и современные подходы к рендерингу и оптимизации производительности, которые критически важны для успешных веб-приложений.

Первое издание фокусировалось на классических паттернах, таких как Module, Observer и Mediator, которые остаются актуальными и сегодня. Во втором издании автор освещает такие современные паттерны, как promises, async/await и новые варианты Module. Книга также охватывает архитектурные паттерны, включая MVC, MVP и MVVM, и рассказывает о том, как современные фреймворки вписываются в эти архитектурные концепции.

Во 2-м издании особое внимание уделено специфическим паттернам для React, таким как Hooks, Higher-Order Components и Render Props. Эти паттерны, важные для разработки на React, позволяют создавать гибкие и масштабируемые приложения. Османи рассматривает не только паттерны, но и лучшие практики, такие как организация кода, оптимизация производительности и улучшение рендеринга. Описываются темы динамического импорта, разделения кода, серверного рендеринга, гидрации и архитектуры «островов» (Islands architecture), которые необходимы для построения быстрых и отзывчивых веб‑приложений.

Отзывы, примеры кода и онлайн-ресурсы к книге

Адди Османи ведет свой блог addyosmani.com, в котором есть разделы по каждой его книге. В частности, довольно большой раздел в виде отдельного лендинга посвящен обсуждаемой нами книге Learning JavaScript Design Patterns patterns.addy.ie.
Здесь вы найдете отзывы, примеры кода и много-много полезного онлайн-материала, дополняющего книгу (все это на англ. яз.).

Из интересного — фанаты автора не только пишут отзывы, но и выкладывают фото своих купленных книг.

Что полезного в главах

Оригинальное английское оглавление есть на сайте издательства O’REILLY, а описание глав в русском издании вы найдет ниже. Просто пробегитесь по аннотациям к каждой главе и у вас будет понимание всей книги, как будто вы сами проанализировали содержание глав и составили ее конспект. Кстати, главы разного размера и разной насыщенности материалом, поэтому аннотации тоже разные по размеру: 

Глава 1. Введение в паттерны проектирования  

В этой главе обсуждается история паттернов проектирования и их роль в программировании. Автор объясняет, что такое паттерн и как его можно применять на практике, чтобы улучшить структуру кода и сделать его более поддерживаемым. На простом примере автор показывает, как использовать паттерны для решения повседневных задач в разработке.  

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

Глава 2. Проверка "паттерна", прото-паттерны и правило трех  

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

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

Глава 3. Структурирование и написание паттернов  

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

Резюме: Эта глава о том, как создавать четкие и понятные описания паттернов для совместной работы в команде.

Глава 4. Антипаттерны  

Здесь объясняется, что такое антипаттерны и почему они появляются в коде. Автор приводит примеры антипаттернов в JavaScript, подчеркивая их недостатки и предлагая альтернативные решения.  

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

Глава 5. Современный синтаксис и возможности JavaScript  

Эта глава посвящена новым возможностям JavaScript, которые упрощают создание модульных и организованных приложений. Автор подробно рассматривает работу с модулями, использование динамических и статических импортов, а также классов с конструкторами. Здесь же рассматриваются методы оптимизации производительности с помощью модульной структуры и примеры использования классов в популярных фреймворках.  

Резюме: Автор знакомит с новыми возможностями JavaScript и как их эффективно использовать для создания более модульного и гибкого кода.

Глава 6. Категории паттернов проектирования  

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

Резюме: Вы научитесь классифицировать паттерны и выбирать подходящий тип для решения конкретных задач.

Глава 7. Паттерны проектирования в JavaScript  

Это одна из самых объемных глав книги. Она посвящена применению различных паттернов непосредственно в JavaScript. Глава делится на три категории: порождающие, структурные и поведенческие паттерны.  

  • Порождающие паттерны: Конструктор, Модуль, Синглтон и Прототип, включая их использование в React. Особое внимание уделяется разным способам создания объектов, модулям с использованием WeakMap и шаблонам для управления состоянием в React.

  • Структурные паттерны: Фасад, Mixin, Декоратор и Приспособленец. Здесь автор обсуждает применение этих паттернов для создания легко расширяемого и гибкого кода. Приведены примеры для оптимизации DOM и управления событиями.

  • Поведенческие паттерны: Наблюдатель, Издатель/Подписчик, Посредник и Команда. Рассматривается их значение для работы с событиями, коммуникацией между компонентами и управлением состоянием.  

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

Глава 8. Паттерны JavaScript MV*   

Глава подробно описывает паттерны архитектуры MV* — MVC, MVP и MVVM, и их применение в JavaScript.  

  • MVC: Основы модели-представления-контроллера, особенности реализации в JavaScript.

  • MVP и MVVM: Сравнение с MVC, преимущества и недостатки, области применения.

  • Современные MV* паттерны: Рассмотрение их использования с React и другими современными библиотеками.  

Резюме: Вы узнаете, как структурировать приложения с использованием MV* паттернов, оптимизируя архитектуру и взаимодействие компонентов.

Глава 9. Паттерны асинхронного программирования  

Эта глава раскрывает лучшие практики работы с асинхронностью в JavaScript. Она охватывает различные паттерны, такие как promise chaining, параллельное и последовательное выполнение, мемоизация и retry. Отдельно описаны паттерны с использованием async/await, такие как композиция функций, управление ошибками, обработка событий и кэширование данных.  

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

Глава 10. Модульные паттерны разработки в JavaScript  

Автор объясняет основные способы организации модулей в JavaScript, включая AMD, CommonJS и UMD, а также их преимущества и недостатки. Особое внимание уделено их применимости в браузере и серверной среде, с практическими примерами для Node.js и популярных библиотек.  

Резюме: Здесь о том, как выбрать подходящий формат модулей для разных сред выполнения и организовывать модульный код.

Глава 11. Паттерны пространства имен (неймспейсов)

В главе обсуждаются методы работы с пространствами имен, такие как глобальные переменные, объектная нотация, IIFE и инъекция неймспейсов. Также описаны продвинутые техники, такие как автоматизация вложенных неймспейсов и декларация зависимостей.  

Резюме: Вы узнаете, как организовывать код с помощью неймспейсов, чтобы избежать конфликтов и улучшить читаемость кода.

Глава 12. Паттерны разработки в React.js  

Глава рассматривает специфику использования паттернов в React, включая компоненты высшего порядка, Render Props и Hooks, а также преимущества и недостатки каждого подхода. Особое внимание уделено паттернам для разделения кода и оптимизации загрузки.  

Резюме: Автор рассказывает про основные паттерны проектирования в React для улучшения производительности и управляемости компонентов.

Глава 13. Паттерны рендеринга  

В этой главе описаны различные подходы к рендерингу — клиентский, серверный, статический, а также гибридный рендеринг и архитектура островов (Islands architecture). Разбираются преимущества и недостатки каждого подхода.  

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

Глава 14. Структура приложения для React.js  

Автор рассматривает методы организации структуры React-приложений: по модулям, маршрутам и типам файлов. Также даны рекомендации для применения Redux, Styled Components и структурирования Next.js приложений.  

Резюме: Здесь про принципы структурирования React-приложений, чтобы упростить их поддержку и масштабируемость.

Глава 15. Заключение  

В финальной главе автор подводит итоги, акцентируя внимание на ключевых идеях и паттернах, рассматриваемых в книге, и рекомендует, как продолжать их изучение и интеграцию в проекты.  

Резюме: Краткий обзор самых важных концепций книги и советы по их практическому применению.

Заключение

Второе издание Learning JavaScript Design Patterns от Адди Османи — это полезное руководство для JavaScript и React-разработчиков, желающих углубить свои знания и понять современные подходы к проектированию веб-приложений.

Прочитав эту книгу, можно получить достаточно глубокое понимание паттернов проектирования и как применять их в своих JavaScript-кодах и React-приложениях. Вы также узнаете, какие паттерны остаются актуальными в современном вебе, а какие уже потеряли свою значимость. Полезный аспект книги состоит в примерах того, как структурировать код для максимальной поддержки и масштабируемости, а также оптимизировать его для достижения высокой производительности. 

Добавим каплю рекламы от нашего блога:
Открытые ИТ-вакансии компании SSP SOFT можно посмотреть на странице на hh.ru. Если вашей специальности нет в текущих вакансиях, все равно присылайте резюме, т.к. новые позиции в командах открываются еженедельно (пишите в Telegram или на почту job@ssp-soft.com).

Успехов в применении знаний из книги в своих JavaScript-кодах и React-приложениях!

Комментарии (1)


  1. eyeDM
    15.11.2024 03:44

    Я уж ожидал в конце увидеть сноску "MV* признан иноагентом/экстремизмом/запрещённым паттерном на территории РФ"