Gromfer
@Gromfer
Увлекаюсь Laravel

Как правильно выносить логику из моделей?

Сейчас у меня основная логика работы с бд вынесена в сервисы. Они дёргают модели и что-то делают. Но по факту все методы в сервисах статические т.к. не хранят ничего вообще. По сути просто набор функций отвечающий за ту или иную модель. Ну и так если задуматься то разницы между самой моделью в общем-то и нет. Можно конечно в сервисе хранить экземпляр модели, но разницы нет что Auth::user() что $this->getUser(); даже хуже. Как правильнее будет сделать? Бизнес логики никакой нет, по факту только CRUD с моделями. Оставить всё в моделях и дёргать прямо из контроллера их методы? Проект простой, никаких абстракций, сущностей пожалуйста не предлагайте :) сыт репозиториями бесполезными.

Есть ли способ код в модели раскидать по разным классам сгруппировав по общему смыслу но чтобы они были все одной моделью? Точнее по поведению. Или использовать сервисы как я это нормально?
  • Вопрос задан
  • 341 просмотр
Решения вопроса 1
@jazzus
Есть ли способ код в модели раскидать по разным классам сгруппировав по общему смыслу но чтобы они были все одной моделью?

Трейты.

но разницы нет что Auth::user() что $this->getUser();

разница есть. В первом случае я понимаю что получу авторизованного юзера. Во втором получу какого-то юзера непонятного. А если открою метод и увижу Auth::user() будет фейспалм)

сыт репозиториями бесполезными

Ну так это ООП. Пока проект простой смысла нет. Потом усложнится чутка и смысл появляется.
Вообще вопрос абстрактный и без кода бесполезный. Т.к. что-то в моделях, что-то в сервисах, а дофига чего в других Ларавел классах, которые часто не используют.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
agoalofalife
@agoalofalife
Team Lead
Во-перых репозитории не бесполезны.
Во-вторых все что придумали или придумывают имеет смысл, но не везде и не всегда.

Если у ваc простое CRUD приложение, зачем вам нужны сервисы?
Скорее всего вы хотели разгрузить контроллеры и фактически перенесли просто код из одного местов в другое.
И какой код может быть общий, если это просто CRUD.
В Eloquent уже есть вся магия для создание crud
User::create()
User::update()
User::find()

Если у вас что-то больше, до значит какая то бизнес - логика все же есть.
Я вижу два пути:
- Это читать статьи и книги по архитектуре, подойдет Фаулер, Эванс Эрик, Вернон Вон..Раз вас тянет туда по можете параллельно этим заниматься
- Просто писать дальше в духе Laravel, но первое второму не мешает.
Для начала еще эту прочитать.
Если все прочтете много раз, вопросов станет еще больше, дерзайте!
Ответ написан
dmitriylanets
@dmitriylanets
веб-разработчик
Я использую CommandBus и Command для организации бизнес логики, изменения состояния сущностей, в Сервисах если и остаётся то только на получение данных
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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