апи, у меня есть модуль как отдельный контекст отвечающий за продукты, и для создания продукта требуется передать ему id владельца с другого контекста но в апи приходит uuid этого владельца и получается что нужно в базе по этому uuid найти владельца и при создании продукта вставить ему этот айди. Каким образом мне следуют обратится к другому контексту чтобы найти этого владельца? Либо как я ещё думал лучше создать в модуле этого продукта новый репозиторий который будет отвечать за работу этого владельца, но только в этом модуле (в базе есть только 1 таблица владельца)
на uuid связь нельзя сделать?
нет, проблема в том что база существует уже много лет, и мне приходится под неё подстраиваться
uuid же все ровно уже есть, ты же собираешься как-то искать по нему владельца
да, но связь в базе настроена на id вместо uuid
лучше избегать прямых обращений между модулями можно в аппликейшен слое по ююиду найти кастомера через один модуль и другому модулю скормить те данные, что ему нужны но если ты хочешь быть уверенным, что кастомер существует, и чтоб это было в коде, то в модуле где тебе нужен ИД юзера делаешь интерфейс, грубо говоря UserIdProviderInterface::getUserId(Uuid $uuid): UserId; в инфре пилишь адаптер на этот интерфейс, который использует модуль юзеров. Все, теперь модуль продуктов зависит от своего интерфейса, ты в любой момент можешь подсунуть ему другой адаптер (который не лезет в БД, а ходит по хттп например)
спасибо за ответ, не совсем понял о интерфейсеб где он дожен находится? Можно ли об этом чуть подробнее?
интерфейс находится в модуле, который хочет обменять ююид на ид кастомера Это его порт. Мол "я не знаю где лежат кастомеры, мне пофигу где вы возьмете информацию, просто дайте мне что-то, что сможет обменять ююид на обычный айдишник" Теперь все свои сервисы, которым нужно поменять ююид на ид в этом модуле могут использовать этот интерфейс
хм, а у меня каждый модуль имеет инфраструктуру а точнее такие каталоги как Application, Domain, Infrastructure. А вы написали о том что инфраструктура не является частью модуля
ну с таким разделением выгядит логично положить адаптер в инфру модуля юзеров. но прикинь ,что вы переходите на микросервисы и ты выносишь этот модуль вообще в другой репо и теперь он деплоится независимо. Тебе нужен новый адаптер все к тому же модулю юзеров, только он будет ходить по хттп. Куда ты положишь этот адаптер, если папочки с модулем юзеров у тебя больше нет в проекте? =)
то есть будет выглядеть примерно так? Скрин взял с одной лекции на ютуб
Обсуждают сегодня