После прочтения различных источников об архитектуре Ports & Adapters, включая оригинальную статью Alistair Cockburn, я все еще не уверен в определенном значении терминов "порт" и "адаптер" - особенно когда речь идет о сопоставлении этих концепций с артефактами реализации.
Некоторые источники (например, этот пост) подразумевают, что порты в этом шаблоне архитектуры являются артефактами на самой внешней стороне, за которыми следуют адаптеры на промежуточном уровне, которые транслируют между портами и приложением, которое находится в основе.
Однако в оригинальной статье Cockburn порты отображаются как снаружи, так и внутри слоя адаптера в зависимости от направления связи:
- Входящая связь: "Когда в порт поступают события из внешнего мира, адаптер для конкретной технологии преобразует его в полезный вызов процедуры или сообщение и передает его приложению".
- Исходящая связь: "Когда приложению нужно что-то отправить, оно отправляет его через порт на адаптер, который создает соответствующие сигналы, необходимые для принимающей технологии (человеческой или автоматизированной)".
На самом деле для меня ни подход "все снаружи", ни подход "внутри и снаружи" не имеют смысла - я бы рассматривал порты как артефакты, которые всегда размещаются рядом с приложением независимо от направления связи. Imo это также будет соответствовать метафорам порта и адаптера: например, g. имея устройство с последовательным портом, чтобы подключить к нему другое устройство без последовательного порта, мне понадобится адаптер, который адаптирует входящую и исходящую связь с точки зрения моего устройства.
Переходя к реализации этой архитектуры, я бы воспринимал определение портов скорее как часть моего приложения, где я видел бы различные адаптеры как "вне" моего приложения. Например реализация одного порта может состоять из facade
(который будет вызываться адаптерами для входящей связи) и interface
(который будет реализован адаптерами для исходящей связи).
Каково правильное значение терминов порт и адаптер и как эти концепции могут быть сопоставлены с артефактами реализации?
ОБНОВИТЬ:
Нашел эту статью, которая напоминает мое понимание. Остается вопрос, существует ли какое-то общее соглашение.