Укр
Паттерны проектирования

Паттерны проектирования

  • 2 августа, 2023
  • читать 10 мин
Денис Розганяев
Денис Розганяев Software Engineer в Mobilunity, Преподаватель Компьютерной школы Hillel.

Довольно часто начинающие разработчики слышат о паттернах проектирования, но не всегда понимают, что это и для чего.

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

Что такое паттерны программирования?

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

Для меня наиболее комфортным определением является следующее:

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

Из этого определения мы можем понять, что паттерн — это не готовый код, который мы можем скопировать себе в проект. Благодаря паттерну и его инструкциям разработчик может написать свой вариант решения проблемы в контексте своей программы.

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

Рекомендуем публикацию по теме

Зачем знать паттерны?

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

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

Итак, зачем знание паттернов? Я бы выделил 3 основных пункта:

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

Классификация паттернов

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

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

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

Также паттерны отличаются и по назначениям (категориям):

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

Какие паттерны используются во фреймворках?

Фреймворки используют большое количество паттернов как для внутреннего (core) функционала, так и для внешнего использования, предоставляя разработчикам определенный интерфейс для построения приложений. Какие же паттерны используют фреймворки? Поскольку я работаю с Laravel фреймворком, приведу примеры именно из него.

Из коробки Laravel позволяет использовать функционал, который уже является частью паттернов:

  • Facade классы для быстрого доступа к определенному функционалу
  • Builder, активно используемый в моделях, роутерах и других компонентах.
  • Observer, фреймворк, дающий возможность создавать свои инвенты и, например, следить за событиями моделей. Даже создавая middleware, мы используем паттерн
    Proxy.

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

Под капотом Laravel использует больше паттернов.

Вывод

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

Для более подробного ознакомления с этой темой я бы посоветовал прочитать книгу «Gangs of Four (GoF) Design Patterns». В книге очень подробно рассказывается о паттернах, поскольку авторы и придумали большинство из них. Если книга с академическими терминами сложно вам дается, то лучшим вариантом будет мой любимый сервис RefactoringGuru. Это отличный сайт, где вы можете найти все о паттернах и рефакторинге.

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

Рекомендуем публикацию по теме

Рекомендуем курс по теме