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

Курсы

Программирование
iOS Developer. Basic
-23%
Python Developer. Professional
-13%
Golang Developer. Professional
-17%
Python Developer. Basic
-16%
iOS Developer. Professional
-13%
C# ASP.NET Core разработчик
-18%
Unity Game Developer. Professional
-11%
React.js Developer
-12%
Android Developer. Professional
-7%
Software Architect
-12%
C++ Developer. Professional
-8%
Разработчик C#
-8%
Backend-разработчик на PHP
-8%
Архитектура и шаблоны проектирования
-12%
Программист С Разработчик на Spring Framework MS SQL Server Developer AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Vue.js разработчик VOIP инженер Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер-практикум по использованию и настройке GIT IoT-разработчик Advanced Fullstack JavaScript developer Супер-интенсив Azure
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-17%
DevOps практики и инструменты
-18%
Архитектор сетей
-21%
Инфраструктурная платформа на основе Kubernetes
-22%
Супер-интенсив «IaC Ansible»
-16%
Супер-интенсив по управлению миграциями (DBVC)
-16%
Administrator Linux. Professional
-5%
Administrator Linux.Basic
-10%
Супер-интенсив «ELK»
-10%
Базы данных Сетевой инженер AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах»
Специализации Курсы в разработке Подготовительные курсы
+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 соглашусь, но вот по поводу остальных фасадов -- не ясно.

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

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

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