Типичные ошибки при работе с Laravel | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
iOS Developer. Professional Kotlin Backend Developer Flutter Mobile Developer Symfony Framework C++ Developer. Basic Unity Game Developer. Basic Java Developer. Professional
-35%
Highload Architect Unity Game Developer. Professional React.js Developer Специализация Java-разработчик
-25%
Алгоритмы и структуры данных
-16%
Scala-разработчик C# Developer. Professional
-23%
Разработчик голосовых ассистентов и чат-ботов Team Lead Архитектура и шаблоны проектирования NoSQL Web-разработчик на Python Golang Developer. Professional PostgreSQL Vue.js разработчик Супер-практикум по использованию и настройке GIT Разработчик IoT Подготовка к сертификации Oracle Java Programmer (OCAJP) Программист С HTML/CSS
Инфраструктура
Инфраструктурная платформа на основе Kubernetes Microservice Architecture Базы данных Highload Architect Reverse-Engineering. Professional
-8%
Network engineer. Basic Administrator Linux.Basic MongoDB Infrastructure as a code MS SQL Server Developer Cloud Solution Architecture Мониторинг и логирование: Zabbix, Prometheus, ELK Супер-практикум по использованию и настройке GIT Разработчик IoT Экcпресс-курс «ELK» Супер-интенсив "Tarantool" Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» Экспресс-курс «Введение в непрерывную поставку на базе Docker»
Корпоративные курсы
Безопасность веб-приложений Экосистема Hadoop, Spark, Hive Пентест. Практика тестирования на проникновение Node.js Developer Java QA Engineer. Basic
-18%
Reverse-Engineering. Professional
-8%
DevOps практики и инструменты NoSQL Reverse-Engineering. Basic Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Game QA Engineer Супер - интенсив по Kubernetes Дизайн сетей ЦОД Экспресс-курс «IaC Ansible» Экспресс-курс по управлению миграциями (DBVC) Экспресс-курс "Версионирование и командная работа с помощью Git" Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Типичные ошибки при работе с Laravel

Laravel_Deep_11.07_site-5020-0595d6.png

Выбирая framework для нового проекта, всегда важно помнить, что framework – это инструмент, а не цель. Неправильно выбранный инструмент может привести к сложностям при развитии проекта. Правильно выбранный, но неправильно используемый инструмент может привести к ещё большим сложностям. Как и любой другой framework, Laravel позволяет множеством способов «выстрелить себе в ногу». Рассмотрим наиболее типичные ошибки, совершаемые теми, кто начинает работать с Laravel.

Нарушение принципа единственной ответственности (SRP)

Доступные в интернете примеры решения задач с использованием Laravel на каждом шагу нарушают принцип единственной ответственности. Скорее всего, это связано с низким порогом входа и активной популяризацией Laravel как простого в освоении фреймворка. Также свой вклад вносит то, что ORM Eloquent использует ActiveRecord, который сам по себе нарушает этот принцип. Изначально заложенная хорошая архитектура многократно окупится при дальнейшем рефакторинге, поэтому не следует нарушать SRP в угоду «простоте» кода.

Чрезмерная надежда на «магию» фреймворка

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

/api/v1/user/{user_id}/organization/{organization_id}

В методе контроллера параметры были с теми же именами и в том же порядке. Спустя примерно полгода, фронт-разработчики почему-то решили, что логичнее было бы поменять местами organization и user в маршруте. В полной уверенности, что Laravel всё сам определит и подставит так, как нужно, я сделал изменения в маршруте, не трогая метод контроллера. Думаю, не нужно объяснять, что последствия были довольно плачевными.

Злоупотребление использованием фасадов

Laravel содержит большое количество фасадов со статическими методами, которые доступны в любом классе. Злоупотребление их использованием приводит к тому, что архитектура приложения теряет стройность. Особенно активно используется фасад DB, позволяющий получить прямой доступ к данным из базы, минуя ORM. Здесь важно понимать, что если у вас возникает необходимость использования фасада DB, например, в контроллере, то с архитектурой уже что-то не так. В идеале использование фасадов необходимо локализовывать в отдельных классах/иерархиях классов, а уже эти классы внедрять туда, где есть необходимость в их использовании.

Злоупотребление использованием IoC-контейнера

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

На этом предлагаю завершить краткий обзор типичных ошибок при работе с Laravel. Пишите качественный код!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
1 комментарий
0

Злоупотребление их использованием приводит к тому, что архитектура приложения теряет стройность

Мысль не развернута. По поводу фасада DB соглашусь, но вот по поводу остальных фасадов -- не ясно.

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

А как явность зависимостей усложняет рефакторинг многократно? Соглашусь что в какой-то мере усложняет, но вот чтобы многократно... Хотелось бы также увидеть развернутый ответ.

Для комментирования необходимо авторизоваться