169 похожих чатов

Всем здравствуйте. Помогите разобраться. Пытаюсь использовать сервис классы. Но в

гугле попадаются только статьи, где в один сервис класс пихают все методы, например create и update. И называют класс ArtickeService (как в лучших практиках рекомендуемых https://github.com/alexeymezenin/laravel-best-practices/blob/master/russian.md#%D0%91%D0%B8%D0%B7%D0%BD%D0%B5%D1%81-%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0-%D0%B2-%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0%D1%85, подразумевая, что в этом классе будут все методы для работы с моделью Article). При этом вроде промелькивают советы, что один сервис класс должен использоваться для одного действия. И вот дальше. Везде в примерах используется инъекция этого сервис класса в конструкторе контроллера. Опять же, если этот сервис класс универсальный, имеет смысл так делать, а если для каждого действия будет свой класс, наверное плохо для производительности создавать в конструкторе контроллера 10 объектов, когда в методе может 1 или 2 будут использоваться. Или я где-то ошибаюсь? Помогите разобраться.

12 ответов

20 просмотров

сервис слой - это не про ларавель, ищи общую литературу по архитектуре приложений. "один сервис класс должен использоваться для одного действия" один класс/метод должен иметь одну ПРИЧИНУ для изменения. SRP https://habr.com/ru/articles/465507/ "а если для каждого действия будет свой класс, наверное плохо для производительности" нет, не будет, а когда будет, тогда и обсудим. "создавать в конструкторе контроллера 10 объектов" в конструкторе контроллера лары никаких сервисов не надо инжектить, а в методах, тогда для каждого запроса и подтянешь нужные зависимости, и быть много их не должно обычно (если их много, штук 20, тогда тоже обсудим) https://laraway.github.io/bad-practices/#constructor-controller "если этот сервис класс универсальный, имеет смысл так делать" вполне нормально иногда оставить логику в контроллере, особенно если её там на 2 строчки и она больше нигде не нужна. особенно если это не крупное приложение.

а то что у тебя по ссылке вообще не читай, там не всё ок. здесь лучше: https://laraway.github.io/bad-practices/ https://laraway.github.io/conventions/

PSYTRGLES
сервис слой - это не про ларавель, ищи общую литер...

На счёт только для одного действия - давайте перейдём тогда на функции, зачем нам классы? SRP - OK, только я предпочитаю ArticlesCRUDService, ArticleSearchService и т.п.

Mikhail Kramer
На счёт только для одного действия - давайте перей...

это абстрактная тема. соблюдение солид это всегда будет граничить с холиваром, для разных примеров. ArticlesCRUDService - ну это не ооп, ты просто сгруппировал функции

PSYTRGLES
это абстрактная тема. соблюдение солид это всегда ...

А если будет ArticleUpdateAction, то намного лучше стало?

Mikhail Kramer
А если будет ArticleUpdateAction, то намного лучше...

немного да, если честно, уже конкретика

PSYTRGLES
немного да, если честно, уже конкретика

Ну я так пробовал, мне не очень понравилась эта куча классов на одну функцию. И почему бы тогда не использовать простые функции? Классы получаются только ради DI от ларки

Mikhail Kramer
Ну я так пробовал, мне не очень понравилась эта ку...

мы просто так можем дойти до CQRS, но я вообще не к тому, что у тебя плохой сервис, который объединил CRUD функции, может у тебя там в в итоге работает как адаптер или фасад, а я к тому, что сложно вести диалог на тему архитектуры, когда тебе надо сделать пару действий с моделью лары. Твой сервис переиспользуем? он тестируем? какие-то правки в нем НЕ могут поломать то, за что он не отвечает? значит всё хорошо.

Mikhail Kramer
Ну я так пробовал, мне не очень понравилась эта ку...

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

Дмитрий Кондрашов
я хз, может в этом и нет проблем с точки зрения тр...

Action же в основном юзают чтобы одни и те же действия переиспользовать в разных классах

Похожие вопросы

Обсуждают сегодня

Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта