Рассмотрим пример.
При использовании гексагональной архитектуры бэкенду нужны BuyItemPort и PushMessagePort.
Покупка товара - это бизнес-логика. Поэтому порт BuyItemPort реализован на прикладном уровне. Когда пользователь нажимает на кнопку купить, фронтенд отправляет сообщение через веб-сокет. Оно поступает на службу веб-сокета в бэкенде, которая вызывает BuyItemPort. Поэтому служба веб-сокета должна быть ведущим адаптером.
Согласно бизнес-логике, при появлении новых товаров в магазине должно отправляться push-сообщение. Поэтому на прикладном уровне есть некое событие NewItem с обработчиком события. Теперь обработчик вызывает PushMessagePort, который отправляет сообщение через веб-сокет на фронтенд. Поэтому служба веб-сокета должна быть управляемым адаптером.