Паттерны программирования. Примеры на php

Вводная статья цикла о паттернах программирвания и их реализации на php. Поговорим о применимости, ценности инеобходимости паттернов для web-резработчика.

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

В общем, если ты прочитал книжку по паттернам и тебе почему-то ничего не понятно, то скорее всего тебе не хватило конкретных примеров. Но иногда чтобы понять что-то не достаточно одного примера. У меня так было с Docker’ом, чтобы понять идею контейнеров мне потребовалось прочитать порядка 5-6 статей, которые объясняли бы концепцию с разных сторон. И только спустя месяц и несколько бессонных ночей пришло просветление.

Дисклеймер

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

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

Вообще, знание паттернов это не панацея хорошего кода. А в первое время скорее даже наоборот, если не хватает опыта, то появляется желание впихнуть куда-нибудь какой-нибудь из паттернов, чтобы быть крутым. Но на практике это так не работает. Во-первых, в чистом виде паттерны редко можно встретить, их применение всегда сопровождается некоторой адаптацией к предметной области. Иногда небольшой модификации, а иногда глубокой переработки. Но при объяснении архитектуры приложения другому разработчику проще сказать: «Я попытался применить абстрактную фабрику», и этого будет достаточно.

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

Вводная

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

  • Порождающие
  • Структурные
  • Поведенческие

Именно с этого и стоит начинать разговор на всяких собеседованиях. По крайней мере я так делаю =) Это неплохой якорь в памяти. И уже дальше раскручивать каждый подраздел. С этого и начнем.

Порождающие

Говорят, при разговоре о паттернах начинать с Singltone — плохая примета. Поскольку это сильно заезжанный пример, достаточно примитивный для понимания. К тому же в последнее время его всё больше и больше хотят обмазать какахами. Нужно признаться, есть за что, но об этом в соответствующей главе поговорим. Так что начни рассказ с фабрик, мой тебе совет.

Структурные

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

  • Адаптер (Adapter)
  • Мост (Bridge)
  • Компоновщик (Composite)
  • Декоратор (Decorator)
  • Фасад (Facade)
  • Легковес (Flyweight)
  • Заместитель (Proxy)
  • Сущность-Атрибут-Значение (Entity-Attribute-Value EAV)

Последний, кстати, не был описан у Банды Четырёх, но знать его полезно, у меня было несколько проектов, где было удобно использовать именно его.

Поведенческие

  • Цепочка обязанностей (Chain of responsibility)
  • Команда (Command)
  • Интерпретатор (Interpreter)
  • Итератор (Iterator)
  • Посредник (Mediator)
  • Хранитель (Memento)
  • Наблюдатель (Observer)
  • Состояние (State)
  • Стратегия (Strategy)
  • Шаблонный метод (Template method)
  • Посетитель (Visitor)

Ого! Кажется, я ввязался в схватку, которая может оказаться мне не по силам. А я думал, что порождающие паттерны самые многочисленные. В смысле, мне хотелось на это надеяться. Так что, если будешь следить за моими изысканиями, можешь запасаться гречкой, это будет не быстрая история.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

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