Для передачи сквозных данных в Use Case можно использовать объект контекста выполнения Context. Он содержит данные, относящиеся к выполнению операции: текущего Actor, инициатора цепочки выполнения, время вызова, Tenant ID, а также идентификаторы для распределённой трассировки (Request ID, Trace ID, Correlation ID и другие).

Контекст позволяет не передавать в команды технические и другие сквозные параметры, не являющиеся частью бизнес-операции. При этом данные, определяющие саму бизнес-операцию, должны оставаться в команде. Например, текущий пользователь может быть получен из Context, а идентификатор будущего владельца объекта должен передаваться в команде, так как является частью бизнес-сценария.

Контекст обычно создаётся через фабрику на границе приложения, например в HTTP middleware, обработчике консольной команды или consumer’е очереди. При необходимости он может быть сериализован и передан вместе с сообщением.

Когда операция отправляет сообщение или вызывает внешний сервис, текущий контекст может быть разветвлён с помощью fork(). Новый контекст наследует информацию для трассировки, но получает новый Request ID, что позволяет идентифицировать новое выполнение, сохраняя его связь с исходной цепочкой выполнения.

Пример кода: https://pastebin.com/6zpC8np8

Для передачи сквозных данных в Use Case можно использовать объект контекста выполнения Context | Сетка — социальная сеть от hh.ru