Как правильно использовать сервисы и репозитории в web приложении?

Использую фреймворки yii и laravel. Всю логику я всегда располагал в моделях. Слышал про использование сервисов, репозиториев для обработки всей логики. Но зачем они нужны и как их использовать не знаю. Объясните пожалуйста или дайте ссылки на хорошие статьи/видео. Спасибо.
  • Вопрос задан
  • 3182 просмотра
Решения вопроса 1
@kuftachev
Yii2 и Laravel используют Active Record вместо Entity и Repository, то есть описание данных и доступ к ним.

Service - это слой в котором у Java выполняется бизнес-логика, хотя у .Net часто прямо в моделях. (Первое называют анемичными моделями, кто-то рассматривает это как правильную архитектуру, кто-то как антипаттерн).

Это я к тому, что в архитектуре больше философии, чем инженерии.

В общем, не заморачивайтесь. Если у Вас просто CRUD, то нет смысла плодить кучу абстракций и нужно использовать Active Record и запросы через него в контроллере.

Если запросы сложнее и это уже связано с доменной областью, то пишем в Active Query у Yii2 и методы под каждую ситуацию, чтобы при замене логики не искать по всему коду. Но это а том случае, если именно приложение, а не конкретного action.

Если какая-то простая логика, типа сложить два числа, то можно прямо в самом Active Record, если уже что-то сложнее, то выноситься в уровень Service про который Вы и спрашивали. Тогда он будет запрашивать у Active Record, а Controller будет работать с Service.

Repository даёт абстракцию над хранилищем, но я бы не использовал его с Yii2. Тоже очень неоднозначная штука, то что в Java почему-то называют Repository, на самом деле является просто DAO, при этом в .Net используют настоящие Repository.

Главное правило, если кода много и начинаете в нем теряться, нужно думать о том, как его разделить. Остальное с опытом!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Helldar
@Helldar
Just do it.
В ларе юзай Eloquent - это и есть тот самый репозиторий. Некоторые умудряются создавать репозиторий для репозитория. Имхо, бред.
А всю логику держи в сервисах. Если просто, сервисы - это обычный класс, находящийся в папке app/Services. Не забывай ему неймспейс присваивать только, чтобы обращаться по имени.
Ответ написан
Ваш ответ на вопрос

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

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