В общем, есть что то типа UserRepositoryPgSql, UserProfileRepositoryPgSql, UserSettingsRepositoryPgSql, UserLocationRepositoryPgSql, PostRepositoryPgSql и тд
Подумал что стоит для каждого класса и таблицы в БД (user, user_profile, user_location) сделать свой сервис и репозиторий. Теперь наткнулся на проблему, что не могу использовать JOIN. верней могу, но это выбивает из архитектуры.
Нужно получить 10 ближайших пользователей по геокоординатам, с учетом настроек поиска. Соответственно у меня в одном запросе идет поиск по user_location и добавляю join для user, user_profile, user_settings. И делаю это в UserLocationRepositoryPgSql. В общем сейчас вижу только выход - все что связано с user обьеденить в UserRepoPgSql и установить тот факт, что все user_* данные будут в pgsql. Либо все потом перенесу на какий нить Tarantool там, но опять же сразу все таблицы!
p.s. разделил изначально, чтоб иметь возможность часть данных хранить к примеру в файловом хранилище, или на монго. Чтоб гибко всё было.
Какие есть варианты решения моей проблемы?
Проблема с разделением репозиториев
Re: Проблема с разделением репозиториев
агрегат и репозиторий имеют связь, но не таблица и репозиторий. Репозиторий может работать как угодно - из одной таблицы брать данные, из пяти таблиц + http api - лишь бы на выходе отдал необходимый агрегат.S c писал(а):В общем, есть что то типа UserRepositoryPgSql, UserProfileRepositoryPgSql, UserSettingsRepositoryPgSql, UserLocationRepositoryPgSql, PostRepositoryPgSql и тд
Подумал что стоит для каждого класса и таблицы в БД (user, user_profile, user_location) сделать свой сервис и репозиторий
хороший кейс для создания доменного сервиса, который с помощью провайдера данных найдет вам 10 пользователей. И я бы не называл провайдер в данном случае репозиторием, т.к. в данном случае это чистый сервис.S c писал(а):Теперь наткнулся на проблему, что не могу использовать JOIN. верней могу, но это выбивает из архитектуры.
Нужно получить 10 ближайших пользователей по геокоординатам, с учетом настроек поиска
Код: Выделить всё
$nearestUsers = (new NearestUserService(new TarantoolLocationProvider, $userRepository))->get(10);
Re: Проблема с разделением репозиториев
Спасибо, буду "пережевывать"!