Ларавель советы

Прекратите использовать наблюдатели за моделями в Laravel

После прочтения этой статьи вы перестанете использовать Model Observers навсегда! Давайте программировать как профессионалы вместе.

Вы программируете на Laravel? Вы, наверное, знаете функцию Model Observer в Eloquent. Это волшебная черта фреймворка, которая позволяет вам реагировать на события CRUD (создание, чтение, обновление, удаление) моделей в приложении.

Если мы поищем публикации на эту тему на Medium, то получим большое количество туториалов о том, что такое Model Observers и как их использовать. Однако меня беспокоит то, что никто не задается вопросом, стоит ли вообще их использовать.

То, что вы можете что-то сделать, не означает, что вы должны это делать. Начинающие программисты часто используют Eloquent Model Observers, потому что они удобны. И, если честно, я ненавижу идти короткими путями. Давно перестал их принимать.

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

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

На написание этой публикации меня вдохновила одна из статей, недавно опубликованных на Medium, где один из программистов рекомендовал использовать Model Observers. Он привел пример создания слагов статей. Вкратце код выглядел так:

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

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

Отладка кода, написанного таким образом, тривиальна. Юнит-тестирование такой фабрики становится чистым удовольствием и без усилий:

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

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