Прокачайся в код-ревью: для первых 50 участников — курс бесплатный

время чтения: 4 мин

Зачем нужны паттерны проектирования в программировании и где их изучать

Software Engineering Manager Павел Юхнович указывает на плюсы и минусы использования паттернов проектирования и делится полезными источниками для их поиска. Также в статье — ссылки на релевантные курсы: напомним, что участники Anywhere Club могут получить лицензию LinkedIn Learning за 4 простых шага.

Плюсы

  • Удобство обслуживания и читабельность. Паттерны проектирования помогают лучше понять кодовую базу и облегчают чтение кода других людей. Они также помогают писать более разборчивый и поддерживаемый код, что значительно облегчает совместную работу команды.
  • Требуется меньше кода, и нет необходимости изобретать велосипед заново. Скорее всего, то, что вам нужно реализовать, не уникально, и решение было уже найдено с помощью какого-то паттерна проектирования много лет назад.
  • Единый инструмент коммуникации. Паттерны проектирования программного обеспечения — это способ описания и документирования дизайна. Это общий язык, который помогает разным командам общаться друг с другом. Они также служат руководством для разработчиков ПО, помогающим понять, как решать проблемы в будущем. Паттерны могут использоваться дизайнерами, UX-специалистами, бизнес-аналитиками, тестировщиками и всеми, кто хочет улучшить свой рабочий процесс или повысить качество продукта или услуги.

Минусы

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

Источники изучения

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

Онлайн-материалы

Refactoring Guru — это относительно новый сайт с очень качественным содержанием. Что мне в нем нравится:

  • Все абсолютно бесплатно.
  • Подробная и насыщенная структура для каждого паттерна: намерение, проблема, решение, структура, псевдокод, применимость, советы по внедрению, плюсы и минусы, взаимосвязи с другими шаблонами. Все это поможет вам по-настоящему понять специфику каждого из них.
  • Аналогии из реального мира: эти удивительные иллюстрации с простым и понятным объяснением устраняют любые сомнения.
  • Примеры шаблонного кода доступны на 10 различных языках программирования. Таким образом, адептам Python, TypeScript, Java, Ruby, C#, C++, Go, PHP, Rust и Swift не нужно будет снова и снова пытаться понять паттерн, переключаясь между различными ресурсами и книгами в поисках фрагментов кода на предпочитаемом ими языке.
  • Все материалы доступны в виде электронной книги в различных форматах. Она была переведена на многие языки. Однако моим долгосрочным советом было бы улучшить свой английский, чтобы читать оригинальные версии.

Узнай свой уровень английского

Книги

1. Design Patterns: Elements of Reusable Object-Oriented Software. «Банда четырех» — это квартет авторов самой популярной книги о паттернах проектирования. В этой и последующих работах они излагают свое видение того, как паттерны следует использовать при разработке программного обеспечения. Книга была написана для того, чтобы помочь разработчикам программного обеспечения понять некоторые распространенные проблемы объектно-ориентированного программирования и дать рекомендации о том, как использовать принципы паттернов проектирования для написания расширяемых и гибких объектно-ориентированных приложений. Это не каталог паттернов, а скорее описание того, что это такое, как они работают и как их использовать. Она учит словарному запасу и дает рабочие правила применения паттернов в ваших собственных проектах и т.д.

— Если вы новичок в разработке паттернов, то лучше вернитесь к этой книге позже. Если у вас есть Computer Science диплом и вы пробовали эту книгу ранее, но не дочитали ее до конца, я рекомендую вам попробовать еще раз, — считает Павел.

2. Head First Design Patterns (A Brain Friendly Guide) (2004) и второе издание Head First Design Patterns: A Brain-Friendly Guide: Building Extensible and Maintainable Object-Oriented Software (2021) также широко популярны, хотя и довольно противоречивы. Оба издания похожи, поэтому я объединю их описание. Эти книги будут особенно интересны тем, кто только начинает свой путь с паттернами. Они содержат массу дополнительных историй, картинок, кроссворды и кодовые головоломки, примеры кода Java и веселые мемы лихих 90-х годов.

3. Design Patterns for Dummies (2006) — еще одна книга о паттернах проектирования, предназначенная для начинающих. Прекрасные фрагменты Java–кода, простые и понятные объяснения и релевантные примеры — все это создает приятные впечатления от чтения.

4. Learning JavaScript Design Patterns: A JavaScript and Jquery Developer's Guide. Моя рекомендация — быть осторожным с этой книгой. JavaScript развивается очень быстро, и поэтому с момента первой публикации книги многое изменилось. Многие примеры кода либо устарели, либо могут быть просто воссозданы более изящным способом с использованием более новых версий языка.

Адди сотрудничал с Лидией Хэлли для создания patterns.dev. Здесь вы можете найти переосмысление его книги с использованием нового синтаксиса JS. Вся книга представляет собой всего лишь главу в более крупном разделе, где он подробно рассматривает паттерн за паттерном с примерами кода и интересными анимациями. Я действительно рекомендую использовать эту главу, как точку отсчета, поскольку она перечисляет самые популярные паттерны проектирования, применимые к JS.

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

Linkedin Learning курсы

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

Получи лицензию LinkedIn Learning за 4 шага
  1. Programming Foundations: Design Patterns — хороший 90-минутный курс для начинающих.
  2. Design Patterns: Creational — еще один прекрасный и краткий обзор некоторых паттернов.
  3. Python: Design Patterns и Python: Advanced Design Patterns могу предоставить множество убедительных примеров на Python.
  4. Java Design Patterns: Creational, Java Design Patterns: Structural, Java Design Patterns: Behavioral Part 1 и Java Design Patterns: Behavioral Part 2 — в общей сложности более пяти часов полезной информации для Java-разработчиков, но оно того стоит.
  5. Spring: Design Patterns — стоит освоить этот курс, если вы знакомы с фреймворком.
  6. C++ Design Patterns: Creational и C++ Design Patterns — неплохой дуэт для С++ разработчиков.
  7. JavaScript: Patterns и Node.js: Design Patterns могут быть весьма интересными для разработчиков JavaScript.
  8. Go Design Patterns — последний, но не менее важный курс.

Вывод

— Паттерны проектирования программного обеспечения — это мощный инструмент в вашем арсенале, который может помочь преодолеть распространенные проблемы с программным обеспечением, — объясняет Павел, — Они не являются панацеей от всех бед и не решат всех проблем, но они могут быть очень полезны, если вы знаете, как ими пользоваться. Необязательно заучивать их все наизусть — просто изучите теорию и начните применять ее на практике.