Гексагональная архитектура (программное обеспечение) - Hexagonal architecture (software)

В шестиугольная архитектура, или архитектура портов и адаптеров, это архитектурный образец, используемый в разработка программного обеспечения. Он направлен на создание слабо связанный компоненты приложения, которые могут быть легко подключены к их программной среде с помощью портов и адаптеры. Это делает компоненты взаимозаменяемыми на любом уровне и упрощает автоматизацию тестирования.[1]

Источник

Шестиугольная архитектура была изобретена Алистер Кокберн в попытке избежать известных структурных ошибок в объектно-ориентированный дизайн программного обеспечения, например, нежелательные зависимости между слои и заражение пользовательский интерфейс код с бизнес-логика, и опубликовано в 2005 году.[2]

Термин «гексагональный» происходит от графических соглашений, которые обозначают компонент приложения как шестиугольник ячейка. Цель заключалась не в том, чтобы предложить шесть границ / портов, а в том, чтобы оставить достаточно места для представления различных интерфейсов, необходимых между компонентом и внешним миром.[1]

Принцип

Пример шестиугольной архитектуры с внутренним шестиугольником, представляющим ядро ​​приложения, и внешним шестиугольником для адаптеров, причем граница между ними является портами.
Пример шестиугольной архитектуры

Гексагональная архитектура делит систему на несколько слабо связанных взаимозаменяемых компонентов, таких как ядро ​​приложения, база данных, пользовательский интерфейс, тестовые сценарии и интерфейсы с другими системами. Такой подход является альтернативой традиционной многоуровневой архитектуре.

Каждый компонент подключен к другим через ряд открытых «портов». Связь через эти порты осуществляется по заданному протоколу в зависимости от их назначения. Порты и протоколы определяют абстрактное API которые могут быть реализованы любыми подходящими техническими средствами (например, вызов метода в объектно-ориентированный язык, вызовы удаленных процедур, или Веб-сервисы ).

Гранулярность портов и их количество не ограничены:

  • в некоторых случаях может быть достаточно одного порта (например, в случае простого потребителя услуг);
  • обычно есть порты для источников событий (пользовательский интерфейс, автоматическая подача), уведомлений (исходящие уведомления), база данных (для взаимодействия компонента с любой подходящей СУБД) и администрирования (для управления компонентом);
  • в крайнем случае может быть свой порт для каждого вариант использования, если нужно.

Адаптеры являются связующим звеном между компонентами и внешним миром. Они адаптируют обмены между внешним миром и портами, которые отражают требования внутри компонента приложения. Для одного порта может быть несколько адаптеров, например, если данные могут быть предоставлены пользователем через графический интерфейс или интерфейс командной строки, с помощью автоматического источника данных или тестовых сценариев.

Использование, критика и эволюция

Согласно с Мартин Фаулер, гексагональная архитектура имеет преимущество использования сходства между уровнем представления и уровнем источника данных для создания симметричных компонентов, состоящих из ядра, окруженного интерфейсами, но с недостатком скрытия внутренней асимметрии между поставщиком услуг и потребителем услуг, что было бы лучше представлены в виде слоев.[3]

По мнению некоторых авторов, шестиугольная архитектура лежит в основе микросервисы архитектура.[4]

Варианты

Луковая архитектура, предложенная Джеффри Палермо в 2008 году, похожа на гексагональную архитектуру: она также выносит инфраструктуру на внешний вид с соответствующими интерфейсами, чтобы гарантировать слабую связь между приложением и базой данных.[5] Далее он разбивает ядро ​​приложения на несколько концентрических колец, используя инверсия контроля.[6]

Чистая архитектура, предложенная Роберт С. Мартин в 2012 году сочетает принципы шестиугольной архитектуры, луковой архитектуры и нескольких других вариантов; Он обеспечивает дополнительные уровни детализации компонента, которые представлены в виде концентрических колец. Он изолирует адаптеры и интерфейсы (пользовательский интерфейс, базы данных, внешние системы, устройства) во внешних кольцах архитектуры и оставляет внутренние кольца для сценарии использования и сущности[7],.[8] Чистая архитектура использует принцип инверсия зависимости со строгим правилом, согласно которому зависимости должны существовать только между внешним кольцом и внутренним кольцом, и никогда наоборот.

Смотрите также

Рекомендации

  1. ^ а б Алистер, Кокберн (1 апреля 2005 г.). «Гексагональная архитектура». alistair.cockburn.us. Получено 2020-11-18.
  2. ^ Стенберг, Ян (2014-10-31). «Изучение шестиугольной архитектуры». InfoQ. Получено 2019-08-12.
  3. ^ Фаулер, Мартин (2003). Паттерны архитектуры корпоративных приложений. Эддисон-Уэсли. п. 21. ISBN  0-321-12742-0. OCLC  50292267.
  4. ^ Раджеш Р. В. (2017). Микросервисы Spring 5.0: создание масштабируемых микросервисов с помощью Reactive Streams, Spring Boot, Docker и Mesos (Второе изд.). Packt Publishing. С. 13–14. ISBN  978-1-78712-051-8. OCLC  999610958.
  5. ^ Джеффри, Палермо (29 июля 2008 г.). «Луковая архитектура: часть 1». Программирование с Палермо. Получено 2019-08-12.
  6. ^ Чатекар, Сухас (2015). Изучение NHibernate 4: исследуйте весь потенциал NHibernate для создания надежного кода доступа к данным. Packt Publishing. С. 249–250. ISBN  978-1-78439-206-2. OCLC  937787252.
  7. ^ Мартин, Роберт, К. (2012-08-12). "Чистая архитектура | Блог чистого кодера". blog.cleancoder.com. Получено 2019-08-12.
  8. ^ Мартин, Роберт С. (2017). Чистая архитектура: руководство по структуре и дизайну программного обеспечения. Прентис Холл. ISBN  978-0-13-449416-6. OCLC  1004983973.