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 ответов

6 просмотров

сервис слой - это не про ларавель, ищи общую литературу по архитектуре приложений. "один сервис класс должен использоваться для одного действия" один класс/метод должен иметь одну ПРИЧИНУ для изменения. 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 же в основном юзают чтобы одни и те же действия переиспользовать в разных классах

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

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

generic procedure function test<T>(param: T); type case T of longint: NewT = word; longword: NewT = byte; end; var v1: NewT; Как это можно сделать? Чтобы у меня...
notme
21
Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
Делал задачу вот такую https://stepik.org/lesson/4985/step/9?unit=1083 получилось такое https://play.haskell.org/saved/ipKrepqe оно работает, тестов много не писал, но работае...
Fedor
22
Хотел уточнить: копирование из одного рекорда в другой однотипный рекорд можно только по полям отдельно или можно чохом, типа Assign?
Ed Doc
9
Похоже опять туплю задача https://stepik.org/lesson/5431/step/8?unit=1132 код и его работа https://play.haskell.org/saved/lmYTShXM на мой взгляд все правильно, и даже избыто...
Fedor
8
что-то я не понимаю, в линуксе отладочную информацию как убрать из бинаря? он что с этой опцией, что без - одного и того же (достаточно большого) размера (да, я про лазарь)
Iluha Companets
13
Hey Does anyone know how can I receive push notifications from Github on my account? The official Github android app doesn't send notifications, and I don't use the email bec...
Jacob
10
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Как в webstorm включить фичу, чтобы прямо в коде можно было видеть кто редактировал это строчку и в каком коммите?
Антон
8
задача какая - что ты дальше с этой переменно будешь делать? Чем вот так не устраивает? var v1: T;
Александр (Rouse_) Багель
6
Карта сайта