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

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

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

Или же лучше создать в UserReposotory метод findWithPosts в котором просто дополнительно тянуть посты для каждого юзера?
Просто в этом случае тогда вроде как нарушается разделение ответственности. Но такой способ вроде выглядит проще.
А предыдущий - в плане разделения ответственности гуд, но по производительности из-за дополнительных циклов вроде бы хуже.

Дополнительно:

Пусть клиент тянет то, что ему нужно. Твоя работа сделать чистое api, будешь пытаться каждый случай покрывать end-поинтом получится примерно так-же, как с 100% покрытием тестами

Ответы:

1) Используйте ORM, там эти проблемы уже решены.
2) Самый правильный вариант - получать посты по требованию (так называемый lazy loading). Я это говорю, опираясь на то предположение, что пользователь может написать тысячи постов по тысяче символов. Если постов не много и они короткие - можно получать сразу всё через JOIN.
3) Получать список пользователей вместе со список их постов в API звучит как анти-паттерн какой-то. Точно ли такой роут необходим или есть возможность получить посты для выбранного пользователя отдельно?

 

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

 

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

    Для эффективной работы с репозиториями и разделения ответственности между ними, существует несколько bewst practices, которые могут помочь вам справиться с этой задачей:

    1. Один проект - один репозиторий: Для удобства управления кодом и его изменениями, рекомендуется держать весь код одного проекта в одном репозитории. Это позволит легче отслеживать изменения, управлять версиями и контролировать доступ к коду.

    2. Использование веток: Для разделения ответственности между разработчиками и различными частями проекта, можно использовать ветки в репозитории. Каждая ветка может быть отведена под определенную функциональность или задачу, что позволит разработчикам работать независимо друг от друга, не мешаясь в изменениях.

    3. Использование подмодулей: Если ваш проект состоит из нескольких независимых компонентов или библиотек, можно использовать подмодули в гите. Это позволит хранить различные части проекта в отдельных репозиториях, сохраняя при этом связь между ними.

    4. Использование системы управления зависимостями: Для управления зависимостями между различными частями проекта, рекомендуется использовать системы управления зависимостями, такие как Composer для PHP проектов. Это позволит автоматически устанавливать и обновлять необходимые библиотеки и компоненты.

    Пример использования в коде PHP:

    // Пример разделения ответственности между классами в PHP
    class User {
        private $name;
        
        public function __construct($name) {
            $this->name = $name;
        }
        
        public function getName() {
            return $this->name;
        }
    }
    
    class UserRepository {
        private $users = [];
        
        public function addUser(User $user) {
            $this->users[] = $user;
        }
        
        public function getUsers() {
            return $this->users;
        }
    }
    
    $user = new User('John Doe');
    $userRepository = new UserRepository();
    $userRepository->addUser($user);
    $users = $userRepository->getUsers();
    
    foreach ($users as $user) {
        echo $user->getName() . "

Оставить комментарий