@rumasterov

Столкнулся с Circular Dependency, как правильно спроектировать слой работы с внешним истоничком данных (REST API)?

Всем привет.

Есть REST API для которого нужно написать небольшой клиент. Решил сделать следующим образом:

Есть классы UserMapper и PostMapper.

В классе UserMapper есть метод getUserWithPosts($userId), в классе PostMapper есть методы getPostWithUser($postId) и getPostListByUserId($userId) .

Внутри метода getUserWithPosts($userId) класса UserMapper я отправляю запрос к api где запрашиваю пользователя по id и заполняю данными модель User, после чего внутри UserMapper вызываю PostMapper и его метод getPostListByUserId($userId) где выполняется запрос к api и запрашиваются посты пользователя, после чего маплю модель Post и добавляю ее в PostCollection объект и ссылку на эту коллекцию записываю в User.

Проблема в следующем, начал использовать Dependency Injection Container с внедрением зависимостей через конструктор. И тут получилось следующее: у меня UserMapper зависит от PostMapper (внутри метода getUserWithPosts($userId) вызывается PostMapper и загружаются посты) и PostMapper зависит от UserMapper (внутри метода getPostWithUser() загружается пост и загружается пользователь через UserMapper).

Таким образом, возникает ошибка Circular Dependency, зависимости разрулится не могут так как указывают друг на друга.

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

Была еще идея создать UserService, где будет метод getUserWithPosts и уже внутри этого метода вызывать два маппера, тогда они друг от друга зависеть не будут. Но не знаю на сколько это правильно.
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
03 мая 2024, в 11:01
50000 руб./за проект
03 мая 2024, в 10:56
5000 руб./за проект
03 мая 2024, в 10:55
5000 руб./за проект