stringtranslate.com

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

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

Источник

Шестиугольная архитектура была изобретена Алистером Кокберном в попытке избежать известных структурных ловушек в объектно-ориентированном проектировании программного обеспечения , таких как нежелательные зависимости между слоями и загрязнение кода пользовательского интерфейса бизнес-логикой . Впервые она обсуждалась на вики-сайте Portland Pattern Repository ; [2] [3] в 2005 году Кокберн переименовал ее в «Порты и адаптеры». [1] В апреле 2024 года Кокберн опубликовал подробную книгу по этой теме, написанную в соавторстве с Хуаном Мануэлем Гарридо де Пасом. [4]

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

Принцип

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

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

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

Детализация портов и их количество не ограничены:

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

Критика

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

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

Эволюция

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

Варианты

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

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

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

Ссылки

  1. ^ abcd Кокберн, Алистер (2005-04-01). "Гексагональная архитектура". alistair.cockburn.us . Получено 2020-11-18 .
  2. ^ «Гексагональная архитектура в C2 Wiki».
  3. ^ «Архитектура портов и адаптеров в C2 Wiki».
  4. ^ «Объяснение шестиугольной архитектуры».
  5. ^ Фаулер, Мартин (2003). Модели архитектуры корпоративных приложений . Addison-Wesley. стр. 21. ISBN 0-321-12742-0. OCLC  50292267.
  6. ^ Раджеш Р.В. (2017). Микросервисы Spring 5.0: создание масштабируемых микросервисов с помощью Reactive Streams, Spring Boot, Docker и Mesos (Второе издание). Packt Publishing. С. 13–14. ISBN 978-1-78712-051-8. OCLC  999610958.
  7. ^ Джеффри, Палермо (29.07.2008). «Архитектура лука: часть 1». Программирование с Палермо . Получено 12.08.2019 .
  8. ^ Чатекар, Сухас (2015). Изучение NHibernate 4: изучите весь потенциал NHibernate для создания надежного кода доступа к данным . Packt Publishing. С. 249–250. ISBN 978-1-78439-206-2. OCLC  937787252.
  9. ^ Мартин, Роберт, К. (12 августа 2012 г.). «Чистая архитектура | Блог чистого кодера». blog.cleancoder.com . Получено 12 августа 2019 г.{{cite web}}: CS1 maint: несколько имен: список авторов ( ссылка )
  10. ^ Мартин, Роберт С. (2017). Чистая архитектура: руководство мастера по структуре и дизайну программного обеспечения . Prentice Hall. ISBN 978-0-13-449416-6. OCLC  1004983973.