Size: a a a

Laravel для начинающих

2020 June 08

DA

Dimitry Averyanov in Laravel для начинающих
Вот, правда, присоединяюсь к вопросу про организацию классов, как начинающий разработчик:)
Предположим есть пользователи, у пользователей есть проекты.
Если мне нужен список проектов пользователя, я просто получаю его как $user->projects..
А если, скажем, мне надо получить 10 лучших проектов пользователя, и возможно там какая-то довольно сложная логика для выборки...
Первое желание - в модели юзера сделать метод и вызывать $user->getBestProjects.
Ок, не хочу делать толстые модели - делаю сервисный класс для такого метода.
И вот тут у меня затык:) То ли это UserService, и я делаю что-то в духе UserService::getBestProjects - по аналогии с простым получением списка проектов юзера.
То ли это, раз мне нужно получать проекты, ProjectService, и я делаю ProjectService::getBestProjectsByUser($user_id)...
Как лучше? Почему?
источник

ДК

Дмитрий Кожанов... in Laravel для начинающих
Если подумать логически - то ты получаешь список проектов. То есть получать в классе юзера проекты - не логично
источник

EG

Egor Gruzdev in Laravel для начинающих
Dimitry Averyanov
Вот, правда, присоединяюсь к вопросу про организацию классов, как начинающий разработчик:)
Предположим есть пользователи, у пользователей есть проекты.
Если мне нужен список проектов пользователя, я просто получаю его как $user->projects..
А если, скажем, мне надо получить 10 лучших проектов пользователя, и возможно там какая-то довольно сложная логика для выборки...
Первое желание - в модели юзера сделать метод и вызывать $user->getBestProjects.
Ок, не хочу делать толстые модели - делаю сервисный класс для такого метода.
И вот тут у меня затык:) То ли это UserService, и я делаю что-то в духе UserService::getBestProjects - по аналогии с простым получением списка проектов юзера.
То ли это, раз мне нужно получать проекты, ProjectService, и я делаю ProjectService::getBestProjectsByUser($user_id)...
Как лучше? Почему?
- В моделях расставить связи, более в моделях ничего не надо, ну только если мутаторы или на крайний случай scope и то можно без scope
- Для формирования выборок использовать вариант с ProjectService->getBestProjectsByUser(User $user)

А вот почему, ???? Мне например так удобно.
источник

AP

Alexander Pavlenko 🌚... in Laravel для начинающих
Dimitry Averyanov
Вот, правда, присоединяюсь к вопросу про организацию классов, как начинающий разработчик:)
Предположим есть пользователи, у пользователей есть проекты.
Если мне нужен список проектов пользователя, я просто получаю его как $user->projects..
А если, скажем, мне надо получить 10 лучших проектов пользователя, и возможно там какая-то довольно сложная логика для выборки...
Первое желание - в модели юзера сделать метод и вызывать $user->getBestProjects.
Ок, не хочу делать толстые модели - делаю сервисный класс для такого метода.
И вот тут у меня затык:) То ли это UserService, и я делаю что-то в духе UserService::getBestProjects - по аналогии с простым получением списка проектов юзера.
То ли это, раз мне нужно получать проекты, ProjectService, и я делаю ProjectService::getBestProjectsByUser($user_id)...
Как лучше? Почему?
источник

J

Jeen in Laravel для начинающих
- слово Service вообще не юзаю в именовании
- вместо ProjectService->getBestProjectByUser - Project->getBestByUser
источник

DA

Dimitry Averyanov in Laravel для начинающих
Ок, у меня видимо не стыкуется, потому что в простейшем варианте это идет через юзера:
$user->projects
а тут вдруг инвертируется в
ProjectService->getBestProjectsByUser
источник

DA

Dimitry Averyanov in Laravel для начинающих
Спасибо!
источник

A

Alex in Laravel для начинающих
Вообще вместо Service обычно используют репозиторий(место для запросов в бд)
источник

AP

Alexander Pavlenko 🌚... in Laravel для начинающих
🌚
источник

EG

Egor Gruzdev in Laravel для начинающих
Jeen
- слово Service вообще не юзаю в именовании
- вместо ProjectService->getBestProjectByUser - Project->getBestByUser
интересно, как именуешь, можешь поделится опытом
для меня именование этот еще тот "ад"
источник

J

Jeen in Laravel для начинающих
Репозаторий - шняга для Eloquent, не юзайте их вместе
источник

A

Alex in Laravel для начинающих
Jeen
Репозаторий - шняга для Eloquent, не юзайте их вместе
Критикуешь, предлагай
источник

EG

Egor Gruzdev in Laravel для начинающих
Alex
Вообще вместо Service обычно используют репозиторий(место для запросов в бд)
ой давайте не будем про Repository в рамках Laravel + Eloquent
а то сейчас начнется
источник

AP

Alexander Pavlenko 🌚... in Laravel для начинающих
зачем в ларавел репозиторий если в основе у нас АР?
источник

AP

Alexander Pavlenko 🌚... in Laravel для начинающих
если мы говорим о классическом паттерне
источник

AP

Alexander Pavlenko 🌚... in Laravel для начинающих
а не о классе с суффиксом Repository внутри которого return Model::all();
источник

IG

Ilshat Gayanov in Laravel для начинающих
Roman Kolosov
А Буратино разве склоняется?)
кхм
источник

A

Alex in Laravel для начинающих
Alexander Pavlenko 🌚
а не о классе с суффиксом Repository внутри которого return Model::all();
Понятное дело, если у тебя 1 фильтр, по которым данные отдаёшь, это не нужно) но когда у тебя этих запросов больше 15, очень удобно
источник

J

Jeen in Laravel для начинающих
Alex
Критикуешь, предлагай
Выше написал - сервисные слой с логикой. Eloquent уже в себе вмещает репозиторий, ибо он использует паттерн Active Records
источник

AP

Alexander Pavlenko 🌚... in Laravel для начинающих
если у тебя в одном методе 15 запросов, ты что-то делаешь не так🌚
источник