В сервис-ориентированной архитектуре, которую вы описываете, совершенно нормально, чтобы данные реплицировались в несколько сервисов, каждый из которых расширяет базовую сущность, специфичную для этого сервиса.
Я предлагаю пересмотреть границы ваших сервисов, хотя,Услуга - это технический орган для конкретного бизнес-процесса .Сервисы не предназначены для согласования с бизнес данными .
Например, ваши Product Service
и User Service
звучат как бизнес-данные, а Application-Service
звучит слишком широко, не знаядополнительная информация.
Рассмотрим Order-Service
, которому нужна информация о продуктах.Он может подписаться на ProductCreated
события из Product-Service
, чтобы заполнить себя информацией о продукте, хотя, вероятно, просто ProductID.Order-Service
не нужно знать название продукта, его описание, цену (это может указываться в услуге Billing
) и т. Д.
Поскольку служба является единственным органом управления бизнес-процессом,поэтому он также должен владеть пользовательским интерфейсом.Составные шаблоны пользовательского интерфейса позволяют разрисовывать одну страницу с компонентами из нескольких служб.Application-Service
будет содержать страницу и клей, который объединяет компоненты.Для получения дополнительной информации об этом я нашел Micro Frontends хорошее чтение.