@eugenedrvnk

Как придерживаться разделения ответственности между репозиториями?

В приложении есть необходимость получить список юзеров с постами для каждого из юзеров:

[
  {id: 1, username: 'xyz', age: 22, posts: [{id: 1, title: 'first post'},
  {id: 2, username: 'aaa', age: 41, posts: [{id: 41, title: 'hello'},
] // и так далее...


У меня уже отдельно имплементированы репозитории где можно получить либо только юзеров, либо только посты.
Для юзкейса с получением юзеров включая в них посты, будет ли ок сначала получить юзеров и потом для них фетчить посты?

const users = await this.userRepository.findLatest();
const postsByUserIds = await this.postRepository.findByUserIds(users.map(user => user.id));
return users.map((user) => {
  return {
     ...user,
     posts: postsByUserIds(user.id)  
  }
})


Или же лучше создать в UserReposotory метод findWithPosts в котором просто дополнительно тянуть посты для каждого юзера?
Просто в этом случае тогда вроде как нарушается разделение ответственности. Но такой способ вроде выглядит проще.
А предыдущий - в плане разделения ответственности гуд, но по производительности из-за дополнительных циклов вроде бы хуже.
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ответы на вопрос 1
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
1) Используйте ORM, там эти проблемы уже решены.
2) Самый правильный вариант - получать посты по требованию (так называемый lazy loading). Я это говорю, опираясь на то предположение, что пользователь может написать тысячи постов по тысяче символов. Если постов не много и они короткие - можно получать сразу всё через JOIN.
3) Получать список пользователей вместе со список их постов в API звучит как анти-паттерн какой-то. Точно ли такой роут необходим или есть возможность получить посты для выбранного пользователя отдельно?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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