Тёмный
No video :(

Куда вынести логику из controllers, commands, jobs. Лучшие практики Laravel разработчиков 

Просто о Laravel. CutCode
Подписаться 14 тыс.
Просмотров 22 тыс.
50% 1

Опубликовано:

 

27 авг 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 84   
@user-kd9gj3vz7p
@user-kd9gj3vz7p 8 месяцев назад
Спасибо огромное, раньше не понимал чем отличается экшены от сервисов, почему кто то использует одно а кто то другое
@rpy6ocTb
@rpy6ocTb 2 года назад
Ох, хулиган =) по консольным командам тоже хотелось бы видео. Видео с тестами очень ждем!
@CutCodeRu
@CutCodeRu 2 года назад
Принял)
@devvv747
@devvv747 2 года назад
Очень большое спасибо з информативное видео и Ваш труд! Один из самых информативных каналов по laravel в ютубе!
@CutCodeRu
@CutCodeRu 2 года назад
Благодарю, стараюсь!
@sovrinfo
@sovrinfo Год назад
Спасибо за видео. Коммент в поддержку!
@user-ke4uc3mg8g
@user-ke4uc3mg8g 2 года назад
Очень полезный и интересный ролик получился! Спасибо! И тоже жду гайд по тестам)))🙂
@CutCodeRu
@CutCodeRu 2 года назад
Спасибо, сам жду)
@ev_geniy17
@ev_geniy17 2 года назад
Очень похоже на porto, только без tasks, тут главное добавить правило что action не может вызывать другой action, дублирующую логику выносить на уровень тасков, иначе можно получить колбекхелл когда action вызывает др. Action, тот следующий и т. Д. Ещё я бы добавил, что action должен содержать бизнес логику и не иметь прямых зависимостей, а такие вещи как хранение, транспорт и отображение нужно выносить в соответствующие слои
@levdau
@levdau 2 года назад
Видео заставило задуматься. Спасибо.
@CutCodeRu
@CutCodeRu 2 года назад
Какие мысли породило?)
@levdau
@levdau 2 года назад
@@CutCodeRu Прежде всего о нахождении баланса между непосредственно выполнением задачи бизнес логики и наведением порядка, через повышение степени абстракции.
@ivan_adamovich
@ivan_adamovich 2 года назад
Спасибо, очень интересный ролик)
@CutCodeRu
@CutCodeRu 2 года назад
Старался!
@Heyb111
@Heyb111 2 года назад
Информативно, но как по мне в больших проектах где много бизнес логики сложно найти место где можно лаконично использовать экшин класс и чтоб он был красивым и маленьким как на видео,. Писать 10 экшин классов вместо 1-2 классов по 5 методов не самый лучший подход
@CutCodeRu
@CutCodeRu 2 года назад
Нужно варьировать, иногда отличное решение но не панацея
@gigavaxer6557
@gigavaxer6557 2 года назад
Спасибо. Интересный материал и очень полезный. И о трейтах было бы интересно.
@CutCodeRu
@CutCodeRu 2 года назад
Принято!
@PostScripton
@PostScripton Год назад
Почему бы не хранить взаимодействие с другими сервисами в директории Clients? Тогда там будут находиться чисто классы, содержащие Guzzle клиенты и удобную обёртку над внешним API. Потом всю бизнес-логику, связанную с этим внешним сервисом можно использовать в классе, который будет находиться в директории Services. И тогда в конструкторе сервиса ты пропишешь что-то вроде: $this->client = new VimeoClient($apiToken); и вызываешь удобные методы, которые ты сам описал. Т.е. Clients - для клиентов к внешним API, а Services / Managers - для бизнес-логики. Я согласен с комментом, где чел сказал, что создавать 10 классов для сложной бизнес-логики не так красиво будет, поэтому используются Services / Managers.
@DevOlegKosarev
@DevOlegKosarev 9 месяцев назад
еще провайдера в DI и вообще красота как например в codeigntaer можно написать Services::vimeoClient($apiToken); или и того лучше получять $apiToken на уровне самого провайдера или еще веселее передать return new VimeoClient($apiToken) и вызывать уже Services::vimeoClient(); Ну или еще проще всё в томже провайдере $vimeoClient = new VimeoClient(new Guzzle(), ... ) $vimeoClient->setApiToken($apiToken); return $vimeoClient; Вариантов массов согласен с тобой как обойти более красиво этот момент через сервисы....
@user-nk1jh3ic1v
@user-nk1jh3ic1v Год назад
Крутой канал, кайфую прям
@CutCodeRu
@CutCodeRu Год назад
Приятного просмотра!
@SemyonF89
@SemyonF89 5 месяцев назад
Очень благодарен вам!
@CutCodeRu
@CutCodeRu 4 месяца назад
👌
@asxenonify
@asxenonify 11 месяцев назад
Такой подход хорошо использовать в небольших проектах. Было бы здорово увидеть видео про DDD и Porto. К примеру в Yii 2 Есть возможность скомпоновать логику в модули, а не разбрасывать всё по папкам. Жалко, что в Laravel из коробки такого нет.
@fredmorrison7513
@fredmorrison7513 3 месяца назад
Что мешает скомпоновать логику в модули на Laravel?)
@asxenonify
@asxenonify 3 месяца назад
@@fredmorrison7513 вот хотелось бы посмотреть как это делается, желательно на русском.
@kekivanovich9222
@kekivanovich9222 2 года назад
То что нужно, спасибо!
@artem-web-developer
@artem-web-developer Год назад
Почитал коменты), где писали что повествование жесть, как по мне в целом все понятно объяснил, или выносим в папку actions, или в services(я так кстати и делаю), мне больше нравится логику в одном классе писать, ну само собой там не 2 тысячи строк в одном классе)) или в трейты, трейты используем только в том случае, когда будем этот трейты где-то ещё переиспользовать
@CutCodeRu
@CutCodeRu Год назад
спасибо за мнение!
@mnogokotin
@mnogokotin 2 года назад
спасибо за видос ) + за трейты
@CutCodeRu
@CutCodeRu 2 года назад
Принял)
@silentage6310
@silentage6310 2 года назад
написал длинный коммент про то как надо бы делать, но нажал случайно какую то кнопку и весь текст пропал. в общем, буду краток, неплохо было на вход/выход еще DTO передавать. т.к. в будущем могут появится разные внешние интерефейсы (апи для моб приложения, для клиентов, чат боты и тд).
@CutCodeRu
@CutCodeRu 2 года назад
Согласен но урок немного не об этом, слишком бы раздулся
@dimagudkov2697
@dimagudkov2697 2 года назад
@@CutCodeRu а можно урок по DTO (когда зачем как и почему)?
@CutCodeRu
@CutCodeRu 2 года назад
@@dimagudkov2697 есть такой, ищите на канале
@silentage6310
@silentage6310 2 года назад
проблема экшн классов еще и в том что обычно логику экшена приходится разбивать на несколько функций. а эти функции бывают нужны и в других экшенах. в итоге получаем что экшен класс по большей части свою работу будет выполнять в сервис классах. у меня сервисы тоже обычно это коннекторы к разным апи. а бизнес логика в *Manager классах.
@user-ew1uj9nu9p
@user-ew1uj9nu9p 2 года назад
В экшен классе должен быть только один метод, в твоём случае он слишком жирный и ты должен использовать экшен а не метод в другом экшене
@0kkama
@0kkama 2 года назад
6:44 Поддерживаю/реквестирую
@karenmelikyan377
@karenmelikyan377 Год назад
чтобы разгрузить логику в контроллерах , надо загрузить приложение абстракциями )
@vladimirbudkin1872
@vladimirbudkin1872 2 года назад
Использую DTO для передачи данных, вместо непонятного array $data
@RottenFoil
@RottenFoil Год назад
Без нормальной модульности из коробки, это все равно каша. Представляю какой кайф заходить в папку Actions и видеть там пару сотен файлов, красота.
@anatolysokolov
@anatolysokolov 2 года назад
8:34 assertEquals должен быть не $user, a $user->email
@CutCodeRu
@CutCodeRu 2 года назад
Да, конечно! Это набросок, не заметил
@twentxx
@twentxx 2 года назад
♥️👍
@shvoraq
@shvoraq 2 года назад
Зачем придумывать велосипед ? ( ViewModel ) Используйте доктрину
@artorios5192
@artorios5192 Год назад
Спасибо, интересно! Только я не понял, зачем делать интерфейсы к экшн хендлерам? У меня, например, экшн классов много и все имеют разные аргументы. Или тут имеется ввиду, что для каждого экшн класса надо писать свой интерфейс? Если так, что смысл? Забиндить можно же не только интерфейс, но и сам класс, или я что-то не понимаю)
@CutCodeRu
@CutCodeRu Год назад
Только для там где есть вероятность изменения реализации, для дальнейшей гибкости
@user-eq9jz4vf2w
@user-eq9jz4vf2w 2 года назад
Вопрос не связанный с видео Как мне в ларавел отсортировать нужное количество товаров к примеру. Есть 100 товаров мне у них есть вип статус и мне нужно отсортировать волшебным образом по вип статусу. Чтоб первые 5 товаров были с вип статусов потом 10 обычных товаров потом 5 с вип статусом и так далее)
@domnash100
@domnash100 2 года назад
Что мешает сделать три отдельных запроса к БД со своими сортировками ?
@CutCodeRu
@CutCodeRu 2 года назад
если хотите быстро получать помощь - пишите сюда - t.me/laravel_chat
@supram941g5
@supram941g5 2 года назад
Где по вашему мнению должна располагаться валидация входных параметров для экшна? (сразу отсеку вариант с FormReaquest т.к. экшн может вызываться откуда угодно, из команды например)
@LifestarTV
@LifestarTV 2 года назад
Можно использовать пакет spatie/laravel-data и передавать в экшн объект Data (создавая его методом Data::validate)
@supram941g5
@supram941g5 2 года назад
@@LifestarTV Вы правы за исключением того что для этого не нужно использовать пакет. А также того что это компромисс между тем как действительно надо и реальностью. Поэтому очень бы хотелось увидеть ответ CutCode
@user-ew1uj9nu9p
@user-ew1uj9nu9p 2 года назад
Влидация должна быть "с наружи". По умолчанию для всех экшенов считаем что пришли корректные данные
@CutCodeRu
@CutCodeRu 2 года назад
Вне экшена
@supram941g5
@supram941g5 2 года назад
@@user-ew1uj9nu9p Почему? не поделитесь источником?
@vladimirmakarov6344
@vladimirmakarov6344 2 года назад
Подскажите, что за тема для phpstorm используется?
@CutCodeRu
@CutCodeRu 2 года назад
Nord
@coopsprofi8617
@coopsprofi8617 2 года назад
Для чего нужна эта привязка контракта к action? ведь зачастую в action реализуется один метод __invoke, в таком случае создание контракта(интерфейса) с одним методом это ведь излишне
@coopsprofi8617
@coopsprofi8617 2 года назад
Когда условно контракт для какого-нибудь сервиса или фабрики твоей, более логичен и востребован, и там можно можно уже применить эту привязку, и для чего вообще стоит указывать контракт вместо самого сервиса или фабрики? чем это помогает вообще при разработке?
@CutCodeRu
@CutCodeRu 2 года назад
Гибкостью и подстановкой
@coopsprofi8617
@coopsprofi8617 2 года назад
@@CutCodeRu Спасибо за ответ! А зачем эта гибкость в actions ? которые реализуют один метод по сути invoke
@m.kohone
@m.kohone 2 года назад
@@coopsprofi8617 в случае написания нового action класса можно будет одном месте в сервис провайдере внести изменения, а не бегать по десятку контроллеров и править в них.
@user-mt9bq2xe1z
@user-mt9bq2xe1z 2 года назад
В итоге, если используешь экшен классы, в контроллерах ветвления вообще не бывает?
@CutCodeRu
@CutCodeRu 2 года назад
Все бывает, зависит от реализации
@pryanik150
@pryanik150 2 года назад
Repositories не популярны?
@CutCodeRu
@CutCodeRu 2 года назад
В laravel нет
@pryanik150
@pryanik150 2 года назад
@@CutCodeRu хотя даже в документации они упоминаются
@CutCodeRu
@CutCodeRu 2 года назад
@@pryanik150 наверно путаете с resources
@user-eq5rm5nh4h
@user-eq5rm5nh4h 2 года назад
@@CutCodeRu раздела конечно нет про них Но в примерах кода упоминаются
@yuriymiroshnychenko5446
@yuriymiroshnychenko5446 2 года назад
@@user-eq5rm5nh4h действительно упоминают в примерах кода, а так же на laracast, но конкретных примеров реализации нет. На практике паттерн repository использовать с eloquent не самая лучшая идея. Мы на проекте получили только лишний слой абстракции, теперь убираем все это. Если интересно можете на хабре найти минимум две статьи про то как это можно сделать, почему не стоит, и почему это все же не repository.
@user-qy1gh7xr3q
@user-qy1gh7xr3q 2 года назад
Что за тема php storm ?
@CutCodeRu
@CutCodeRu 2 года назад
Nord
@serghell6053
@serghell6053 2 года назад
Кране непоследовательное изложение. Ужас. Сначала говорим, что трейты - плохая идея, хотите трейты - пищите в комменты, и тут же как создать трейт. ДЛЯ ЧЕГО ТАКОЕ ЗАПУТЫВАНИЕ? При том реально не ответил на вопрос - куда переносить логику - ушел в треты. Начало видоса тож сумбурное - ну экшены... но хоть бы абзац - для чего они нужны. такое чувство, что делаешь рекламный проморолик для будущих видосов. А как обучающий - этот видос гавно
@u1ion
@u1ion Год назад
повествование у тебя просто жесть, учись как то развивать мысль или делать заставки в нужных местах на 4-й минуте подумал что ты уже ролик закончил.
Далее