Гексагональная архитектура , или архитектура портов и адаптеров , представляет собой архитектурный шаблон, используемый в разработке программного обеспечения . Он направлен на создание слабосвязанных компонентов приложения, которые могут быть легко подключены к их программной среде с помощью портов и адаптеров . Это делает компоненты взаимозаменяемыми на любом уровне и облегчает автоматизацию тестирования. [1]
Шестиугольная архитектура была изобретена Алистером Кокберном в попытке избежать известных структурных ловушек в объектно-ориентированном проектировании программного обеспечения , таких как нежелательные зависимости между слоями и загрязнение кода пользовательского интерфейса бизнес-логикой . Впервые она обсуждалась на вики-сайте Portland Pattern Repository ; [2] [3] в 2005 году Кокберн переименовал ее в «Порты и адаптеры». [1] В апреле 2024 года Кокберн опубликовал подробную книгу по этой теме, написанную в соавторстве с Хуаном Мануэлем Гарридо де Пасом. [4]
Термин «шестиугольный» происходит от графических соглашений, которые показывают компонент приложения как шестиугольную ячейку. Целью было не предположить, что будет шесть границ/портов, а оставить достаточно места для представления различных интерфейсов, необходимых между компонентом и внешним миром. [1]
Гексагональная архитектура делит систему на несколько слабосвязанных взаимозаменяемых компонентов, таких как ядро приложения, база данных, пользовательский интерфейс, тестовые скрипты и интерфейсы с другими системами. Этот подход является альтернативой традиционной многоуровневой архитектуре.
Каждый компонент соединен с другими через ряд открытых «портов». Связь через эти порты следует заданному протоколу в зависимости от их назначения. Порты и протоколы определяют абстрактный API , который может быть реализован любыми подходящими техническими средствами (например, вызов метода на объектно-ориентированном языке , удаленные вызовы процедур или веб-сервисы ).
Детализация портов и их количество не ограничены:
Адаптеры — это связующее звено между компонентами и внешним миром. Они адаптируют обмены между внешним миром и портами, которые представляют требования внутренней части компонента приложения. Для одного порта может быть несколько адаптеров, например, данные могут быть предоставлены пользователем через графический интерфейс или интерфейс командной строки, автоматизированным источником данных или тестовыми скриптами.
Термин «шестиугольный» подразумевает, что в концепции есть 6 частей, тогда как есть только 4 ключевых области. Использование термина происходит от графических соглашений, которые показывают компонент приложения как шестиугольную ячейку. Целью было не предположить, что будет шесть границ/портов, а оставить достаточно места для представления различных интерфейсов, необходимых между компонентом и внешним миром. [1]
По словам Мартина Фаулера , шестиугольная архитектура имеет преимущество в использовании сходства между уровнем представления и уровнем источника данных для создания симметричных компонентов, состоящих из ядра, окруженного интерфейсами, но имеет недостаток в скрытии внутренней асимметрии между поставщиком услуг и потребителем услуг, которые лучше было бы представить в виде слоев. [5]
По мнению некоторых авторов, гексагональная архитектура лежит в основе архитектуры микросервисов . [6]
Архитектура лука, предложенная Джеффри Палермо в 2008 году, похожа на гексагональную архитектуру: она также выносит инфраструктуру за пределы интерфейса, чтобы обеспечить слабую связь между приложением и базой данных. [7] Она далее разбивает ядро приложения на несколько концентрических колец, используя инверсию управления . [8]
Чистая архитектура, предложенная Робертом К. Мартином в 2012 году, объединяет принципы гексагональной архитектуры, луковичной архитектуры и нескольких других вариантов. Она обеспечивает дополнительные уровни детализации компонента, которые представлены в виде концентрических колец. Она изолирует адаптеры и интерфейсы (пользовательский интерфейс, базы данных, внешние системы, устройства) во внешних кольцах архитектуры и оставляет внутренние кольца для вариантов использования и сущностей . [9] [10] Чистая архитектура использует принцип инверсии зависимостей со строгим правилом, что зависимости должны существовать только между внешним кольцом и внутренним кольцом и никогда наоборот.
{{cite web}}
: CS1 maint: несколько имен: список авторов ( ссылка )