#domain-driven-design
Вопрос:
Я пытаюсь разработать микросервис, используя подход DDD. Микросервис имеет агрегат, состояние/логика которого зависит от данных, полученных по WS-соединению с сторонним сервером. WS используется из-за проблем с задержкой.
Согласно моему пониманию, DDD, по-видимому, указывает на то, что внешние API должны проходить через уровень приложений. За исключением создания экземпляра соединения WS, при таком подходе на прикладном уровне будет много перемещений туда и обратно для потока данных. Не знаю, как это сделать.
Комментарии:
1. Многое зависит от того, как состояние агрегата зависит от данных, полученных через websocket.
Ответ №1:
Веб-сокет-это форма соединения между вашим микросервисом и другим компонентом. Существуют и другие формы соединений, например, очереди запросов/ответов и сообщений. Подключение является инфраструктурным вопросом, поэтому его реализация (создание экземпляра или получение данных) должна осуществляться не на уровне приложений, а на уровне инфраструктуры.
Как только данные будут получены по каналу веб-сокета, они должны быть упакованы в службу приложений.
Согласно моему пониманию, DDD, похоже, указывает на то, что внешние API должны проходить через уровень приложений
Внешние вызовы API, так же как и веб-сокеты, должны быть реализованы на инфраструктурном уровне. Если API используется для извлечения данных, его, вероятно, следует абстрагировать как репозиторий (в соответствии с принципами DDD: интерфейс репозитория на уровне домена, конкретный репозиторий, вызывающий API на уровне инфраструктуры). И служба приложений вызывает интерфейс репозитория.
Комментарии:
1. Спасибо за ответ. Я понял это. Задача здесь заключается в проектировании потока данных от инфра-уровня до уровня домена для события, полученного на WS. Клиенты WS получают данные асинхронно, которые должны быть отправлены на уровень домена через уровень приложений. Должен быть какой-то обратный вызов прикладного уровня, который должен быть запущен из infra.
2. Один из путей, который я могу придумать, — это отправка события на локальный контроллер, который затем переходит на уровень приложения. Обычный путь к событию домена. Но кажется сложным.