@the5x

Interface для Repository и Service, как правильно сделать?

Пишу проект на Laravel и использую паттерн Repository, где собственно отдельно работаю с ORM и отдельно с данными в Service. Например UserRepositiry и UserService.

Например CRUD, я хотел бы завести Interface и использовать его и в UserRepository и в UserService. Например UserContract. Правильный ли это подход. Если нет, то подcкажите, как правильно, ведь в конструктор контроллера я хочу передавать UserContact $userContract, но и не хочу разделять интерефейсы, на UserServiceContract и UserRepositoryContract, где часть методов будет похожа. Как правильно сделать?
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
AmdY
@AmdY
PHP и прочие вебштучки
Вы плодите лишние сущности, которые к тому же занимаются дублированием.
Ваш UserService должен принимать UserRepository и работать с данными через него.
Так же и контроллер должен работать с UserService и не работать напрямую с UserRepository.
Простая цепочка UserModel -> UserRepository -> UserService -> UserController. Если вы начнёте переставлять звенья, то цепочка запутается и будет хуже чем прямая работа с UserModel.

Интрефейсы я упустил, в 99% в таком кейсе они не имеют смысл, т.к. в проекте у вас будет одна реализация каждой сущности. Плодить интерфейсы ради интерфейсов не стоит. Так же как и репозитории ради репозиториев. Всегда задавайте себе вопрос - зачем я пишу этот код, зачем ввожу это слой, это реально мне надо?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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