Это интересный вопрос.
С моей точки зрения, я стараюсь быть верным шаблону, объясненному его автором, хотя было бы также возможно запустить более одного адаптера драйвера для одного порта драйвера. «приложение в целом» (назовем его системным, поскольку приложение является шестиугольником) - это экземпляр адаптера драйвера, работающего на каждом порту драйвера шестиугольника, и управляемый адаптерреализация каждого управляемого порта.
Конфигурация системы - это адаптер для выбора для каждого порта. Когда вы запускаете основной компонент, вы должны указать, какой адаптер вы хотите для каждого порта.
Тем не менее, я изучил два подхода для запуска системы:
(1) Чтобы иметьдополнительный компонент (назовите его основной компонент , корень композиции, автозагрузка, init или все, что вы хотите), который создает экземпляры управляемых адаптеров и шестиугольника, и, наконец, создает экземпляры адаптеров драйверов и запускает их. Таким образом, архитектура системы будет выглядеть как контейнер приложения на стороне драйвера, а архитектура подключаемого модуля на стороне драйвера.
(2) Для запуска каждого адаптера драйвера отдельно . Именно адаптер драйвера запускает игру, запрашивая у шестиугольника экземпляр порта драйвера, а шестиугольник запрашивает у каждого управляемого порта экземпляр управляемого адаптера.
Итак, на ваш вопрос о главном компонентев вашем примере , согласно моему подходу (1), у меня будет запущено два экземпляра шестиугольника, но у вас может быть только один, я не вижу никаких проблем в этом.
Я написал теоретическийстатья о гексагональной архитектуре в https://softwarecampament.wordpress.com/portsadapters/, и сейчас я работаю над статьей о том, как реализовать гексагональную архитектуру, и примером кода.