muhammad_97
@muhammad_97
PHP-разработчик

Грамотная архитектура в Laravel?

Есть, к примеру, репозиторий (типа такого: vk.cc/5lHdAR, https://laravel.ru/posts/41). Пока нужны простые запросы (получить все записи, найти запись по одному полю и т.д.) все ок, но как только запросы хоть немного усложняются (получить запись из БД со связями, либо найти запись по нескольким полям) код превращается в кашу и класс репо становится очень толстым. Видел где-то скрин, где запросы вынесены в отдельный класс, читал про Query Object Pattern (не знаю, то ли это). В общем, было бы неплохо, если кто-нибудь поделился своими идеями по этому поводу, а еще лучше кодом.
  • Вопрос задан
  • 3326 просмотров
Решения вопроса 2
AmdY
@AmdY
PHP и прочие вебштучки
Нелепица, в обоих примерах возвращается AR, смысла в таких репозиториях нет. Этим страдали 100500 лет назад, когда не было 100500 толковых db и придумывалось не под умирающий php, а под системы, где объекты долго хранятся в памяти и лишь иногда персистятся. Думал лет 10 назад все этой фигнёй отстрадали, так нет, вернулась мода на ddd.

Репозитории должны оставаться простыми, если нужны дополнительные проверки, джойны, условия, сортировки, то создавайте критерии и спецификации https://en.wikipedia.org/wiki/Criteria_Pattern https://en.wikipedia.org/wiki/Specification_pattern
Ответ написан
@devian3000
1-ый вариант. Разделите это всё добро по функционалу, и наследуйте.Так получится что запросы касающиеся чего-либо у вас будут выделены в отдельный класс ( Yii way ).
2-ой вариант. Композиция. Отдельный класс и в нём то же самое что в первом варианте. Это идеально подойдёт для разделения. + вы будете общаться чисто с API класса обёртки, а что внутри будет легко сменить на что угодно и как угодно.
3-ий вариант. Возьмите Doctrine вместо Eloquent и всё будет гораздо более академически практически сразу (ну при наличии знаний и прямых рук разумеется =) )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
muhammad_97
@muhammad_97 Автор вопроса
PHP-разработчик
Комментировать
Ваш ответ на вопрос

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

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