TLDR: порты и адаптеры не похожи на разъемы USB и разъемы USB.Адаптеры - это кабели USB-Lightning.
Я пытаюсь понять, что подразумевается под портом и адаптером, когда речь идет о гексагональной архитектуре.
Это немногоклубок, особенно потому, что
- Сами по себе картины не рассказывают историю
- Картины очень похожи на лук и рассказывают историю по-другому.
Два вложенных многоугольника (традиционно два шестиугольника) представляют логические границы.«Базовая логика домена полностью живет внутри внутреннего многоугольника. За пределами внешнего многоугольника находится реальный мир: шины сообщений, базы данных, пользовательский интерфейс, файловые системы и т. Д. Все эти вещи имеют порты.
ДляНапример, в интерактивной оболочке ваши порты - это stdin, stdout, stderr.
Адаптеры - это то, что мы устанавливаем, потому что порты на внешней границеи порты на внутренней границе не совпадают. Моя модель домена не говорит на SQL, поэтому у меня есть адаптер, который находится между моей моделью домена и клиентом базы данных. Моя модель домена не поддерживает форматирование терминала, поэтому у меня естьадаптер, который находится между моделью домена и интерактивной оболочкой.
Часть волшебства в том, что мы можем объединять новые компоненты, меняя адаптер. Моя логика домена также не знает о представлении HTML, ноЯ должен иметь возможность заменить адаптер интерактивной оболочки на адаптер веб-браузера и дать пользователям новый способработать с моделью предметной области.Я должен иметь возможность переключать стратегии постоянства, используя новый адаптер для связи с новым устройством стабильного хранения.
Порты обычно являются интерфейсами, потому что то, что нас волнует на границе, четко определяет контрактэто должно быть удовлетворено без привязки к конкретной реализации.
Я не понимаю, как это вписывается в DDD.
Одна из причин, по которой трудно понять, какэто подходит;Порты и адаптеры это сантехника, а не доменная модель.Все биты, которые оправдывают работу выполнения анализа домена, живут внутри внутреннего многоугольника.
Репозитории и доменные службы являются распространенными формами адаптеров.Доменные службы обычно являются портами, реализация которых обеспечивается компонентами приложения или инфраструктуры.Аналогично, репозитории обычно являются формой адаптера между приложением и хранимой коллекцией агрегатов.
Рекомендуемое чтение: * Архитектура портов и адаптеров @ c2 wiki