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