Проблема с разделением репозиториев

Обсуждаем, как правильно строить приложения
Ответить
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Проблема с разделением репозиториев

Сообщение S c »

В общем, есть что то типа 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. разделил изначально, чтоб иметь возможность часть данных хранить к примеру в файловом хранилище, или на монго. Чтоб гибко всё было.

Какие есть варианты решения моей проблемы?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Проблема с разделением репозиториев

Сообщение zelenin »

S c писал(а):В общем, есть что то типа UserRepositoryPgSql, UserProfileRepositoryPgSql, UserSettingsRepositoryPgSql, UserLocationRepositoryPgSql, PostRepositoryPgSql и тд

Подумал что стоит для каждого класса и таблицы в БД (user, user_profile, user_location) сделать свой сервис и репозиторий
агрегат и репозиторий имеют связь, но не таблица и репозиторий. Репозиторий может работать как угодно - из одной таблицы брать данные, из пяти таблиц + http api - лишь бы на выходе отдал необходимый агрегат.
S c писал(а):Теперь наткнулся на проблему, что не могу использовать JOIN. верней могу, но это выбивает из архитектуры.

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

Код: Выделить всё

$nearestUsers = (new NearestUserService(new TarantoolLocationProvider, $userRepository))->get(10); 
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: Проблема с разделением репозиториев

Сообщение S c »

Спасибо, буду "пережевывать"!
Ответить