fomvasss
@fomvasss
PHP developer

Какую концепцию структурирования приложения на Laravel лучше использовать?

Какую концепцию структурирования приложения на Laravel лучше использовать для начинающих для не очень сложных проектов? Репозитории или Сервисы . О репозиториях, в отзывах есть много отрицательных. О сервисах информации меньше.
Или может есть еще что то?
  • Вопрос задан
  • 1019 просмотров
Решения вопроса 2
AmdY
@AmdY
PHP и прочие вебштучки
Репозиторий это тоже сервис, RepositoryService. Оба ваши примера идентичны, и просто прячут вашу Eloquent модельку внутри себя, при этом спокойно её возвращают в return. Оба автора делают это без осознания зачем это надо и не получают никакого профита от этих телодвижений.

Единственное что можно вынести из примеров - не использовать eloquent методы в контроллере, их нужно выносить в отдельный сервис или как минимум в отдельный метод модели. Например, у модели Post добавили бы метод findBySlug() или createCoupon($code, $amount, $maxRedemptions), этого достаточно было бы для инкапсуляции и последующего расширения. (хотя не решает проблему с торчащим наружу AR, но это уже другой вопрос)
Ответ написан
Tesla
@Tesla
Пусть вас не смущают плохие примеры работы репозитория. Все эти однострочные методы репозитория с тем же успехом могут быть скоупами Eloquent, он по сути и есть ваш репозиторий, и для небольшого проекта этого вполне достаточно. Вообще пользуйтесь правилом: если не уверены, что вам нужен репозиторий, значит он вам не нужен.

А сервисный слой в данном случае всего лишь способ разгрузить контроллеры и избежать дублирования кода. То, что будет у вас между контроллером и моделью. Пример реализации: https://laravel.com/docs/5.3/queues#creating-jobs создаем Job, выполняющий конкретную узкую задачу, и запускаем его через диспетчер
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Мне кажется, что данные подходы не исключают друг друга. Репозиторий нужен для складирования запросов к модели, а сервисный слой для более сложной логики, которая неуместна в контроллере. И то, и другое уместно, если Вы понимаете, для чего нужен каждый шаблон проектирования.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы