Я не собираюсь расширять этот ответ, чтобы определить, правильно ли определены ваши ограниченные контексты и конечные точки службы, поскольку ваш вопрос, кажется, упрощает проблему, чтобы сохранить четко определенную область, но относительно вашего конкретного вопроса:
Какова наилучшая практика для проверки "владения" сущностями, находящимися в нескольких базах данных в микро-сервисах
В микросервисных архитектурах используется принцип "ничего не делить".И это обычно распространяется от кодовой базы к базе данных.Таким образом, вы правы, предполагая, что вы проверяете это ограничение «кросс-БД» в своем сценарии.
У вас есть несколько вариантов в этом конкретном случае, каждый со своим набором недостатков:
1) Ваш предложенный «существует» (personId = 5, tenantId = 1) » вызов от DocumentContext к PersonContext не является ошибочным сам по себе,но вы создадите прямую зависимость между этими двумя микросервисами, поэтому вы должны спросить себя, нормально ли вам не принимать новые документы, если микросервис PersonManagement находится в автономном режиме.
В определенных ситуациях такие зависимости могут быть приемлемыми, но чем больше их у вас есть, тем меньше ваша микросервисная архитектура будет вести себя как один и более как «распределенный монолит», который сам по себе является антипаттерном.
2) Другой основной вариант, который у вас есть, заключается в том, что вы должны понимать, что DocumentContext очень сильно интересует некоторая информация / поведение, относящиеся к People , поэтомудолжно быть в порядке с моделированием Person Entity внутри его границ.
Это означает, что вы можете подписать DocumentContext на изменения в PersonContext , чтобы знать, какие Люди существуют в настоящее время и каковы их характеристикии, следовательно, иметь возможность хранить локальную копию такой информации.
Таким образом, ваша проверка будет храниться полностью внутри DocumentContext , работа которой будет беспрепятственной из-за возможных проблем с PersonContext и вы обнаружите, что моделирование связанных с документами объектов будет намного чище, чем раньше.
Но в конце вы также обнаружите, что "не делится ничем" *Принцип 1046 * обычно обходится вам в том, что кажется избыточностью, но на самом деле это независимость от контекста.