Шестиугольная архитектура (программное обеспечение)
Шестиугольная архитектура , или архитектура портов и адаптеров , представляет собой архитектурный шаблон, используемый при разработке программного обеспечения . Он направлен на создание слабосвязанных компонентов приложений, которые можно легко подключить к программной среде с помощью портов и адаптеров . Это делает компоненты взаимозаменяемыми на любом уровне и облегчает автоматизацию тестирования. [1]
Источник
[ редактировать ]Шестиугольная архитектура была изобретена Алистером Кокберном в попытке избежать известных структурных ошибок в объектно-ориентированном проектировании программного обеспечения , таких как нежелательные зависимости между уровнями и загрязнение пользовательского интерфейса кода бизнес-логикой . Сначала это обсуждалось в вики Portland Pattern Repository ; [2] [3] в 2005 году Кокберн переименовал его в «Порты и адаптеры». [1] В апреле 2024 года Кокберн опубликовал обширную книгу на эту тему, написанную в соавторстве с Хуаном Мануэлем Гарридо де Пасом. [4]
Термин «шестиугольный» происходит от графических условных обозначений, согласно которым компонент приложения изображается в виде шестиугольной ячейки. Цель заключалась не в том, чтобы предложить шесть границ/портов, а в том, чтобы оставить достаточно места для представления различных интерфейсов, необходимых между компонентом и внешним миром. [1]
Принцип
[ редактировать ]Шестиугольная архитектура делит систему на несколько слабосвязанных взаимозаменяемых компонентов, таких как ядро приложения, база данных, пользовательский интерфейс, тестовые сценарии и интерфейсы с другими системами. Этот подход является альтернативой традиционной многоуровневой архитектуре.
Каждый компонент соединен с другими через ряд открытых «портов». Связь через эти порты осуществляется по определенному протоколу в зависимости от их назначения. Порты и протоколы определяют абстрактный API , который может быть реализован любыми подходящими техническими средствами (например, вызов метода на объектно-ориентированном языке , удаленные вызовы процедур или веб-сервисы ).
Детализация портов и их количество не ограничены:
- в некоторых случаях может быть достаточно одного порта (например, в случае простого потребителя услуги);
- обычно имеются порты для источников событий (пользовательский интерфейс, автоматическая подача), уведомлений (исходящие уведомления), базы данных (для сопряжения компонента с любой подходящей СУБД) и администрирования (для управления компонентом);
- в крайнем случае, при необходимости для каждого варианта использования может быть другой порт .
Адаптеры — это клей между компонентами и внешним миром. Они адаптируют обмены между внешним миром и портами, которые представляют требования внутреннего компонента приложения. Для одного порта может быть несколько адаптеров, например, данные могут предоставляться пользователем через графический интерфейс или интерфейс командной строки, через автоматизированный источник данных или посредством тестовых сценариев.
Критика
[ редактировать ]Термин «шестиугольный» подразумевает, что концепция состоит из 6 частей, тогда как ключевых областей всего 4. Использование этого термина связано с графическими соглашениями, которые показывают компонент приложения в виде шестиугольной ячейки. Цель заключалась не в том, чтобы предложить шесть границ/портов, а в том, чтобы оставить достаточно места для представления различных интерфейсов, необходимых между компонентом и внешним миром. [1]
По словам Мартина Фаулера , шестиугольная архитектура имеет преимущество использования сходства между уровнем представления и уровнем источника данных для создания симметричных компонентов, состоящих из ядра, окруженного интерфейсами, но с недостатком, заключающимся в сокрытии присущей им асимметрии между поставщиком услуг и потребителем услуг. это лучше было бы представить в виде слоев. [5]
Эволюция
[ редактировать ]По мнению некоторых авторов, гексагональная архитектура лежит в основе архитектуры микросервисов . [6]
Варианты
[ редактировать ]Луковая архитектура, предложенная Джеффри Палермо в 2008 году, похожа на гексагональную архитектуру: она также выводит инфраструктуру за пределы инфраструктуры с интерфейсами, чтобы обеспечить слабую связь между приложением и базой данных. [7] Далее ядро приложения разбивается на несколько концентрических колец с помощью инверсии управления . [8]
Чистая архитектура, предложенная Робертом К. Мартином в 2012 году, сочетает в себе принципы гексагональной архитектуры, луковичной архитектуры и нескольких других вариантов. Он обеспечивает дополнительные уровни детализации компонента, которые представлены в виде концентрических колец. Он изолирует адаптеры и интерфейсы (пользовательский интерфейс, базы данных, внешние системы, устройства) во внешних кольцах архитектуры и оставляет внутренние кольца для вариантов использования и сущностей . [9] [10] Чистая архитектура использует принцип инверсии зависимостей со строгим правилом, согласно которому зависимости должны существовать только между внешним кольцом и внутренним кольцом и никогда наоборот.
См. также
[ редактировать ]- Архитектурные шаблоны
- Слой (объектно-ориентированный дизайн)
- Схема составной структуры
- Объектно-ориентированный анализ и проектирование
Ссылки
[ редактировать ]- ^ Jump up to: а б с д Кокберн, Алистер (1 апреля 2005 г.). «Шестиугольная архитектура» . alistair.cockburn.us . Проверено 18 ноября 2020 г.
- ^ «Шестиугольная архитектура в C2 Wiki» .
- ^ «Архитектура портов и адаптеров в C2 Wiki» .
- ^ «Объяснение шестиугольной архитектуры» .
- ^ Фаулер, Мартин (2003). Шаблоны архитектуры корпоративных приложений . Аддисон-Уэсли. п. 21. ISBN 0-321-12742-0 . OCLC 50292267 .
- ^ Раджеш Р.В. (2017). Микросервисы Spring 5.0: создавайте масштабируемые микросервисы с помощью Reactive Streams, Spring Boot, Docker и Mesos (второе изд.). Пакт Паблишинг. стр. 13–14. ISBN 978-1-78712-051-8 . OCLC 999610958 .
- ^ Джеффри, Палермо (29 июля 2008 г.). «Луковая архитектура: часть 1» . Программирование с Палермо . Проверено 12 августа 2019 г.
- ^ Чатекар, Сухас (2015). Изучение NHibernate 4: изучите весь потенциал NHibernate для создания надежного кода доступа к данным . Пакт Паблишинг. стр. 249–250. ISBN 978-1-78439-206-2 . OCLC 937787252 .
- ^ Мартин, Роберт, К. (12 августа 2012 г.). «Чистая архитектура | Блог Clean Coder» . blog.cleancoder.com . Проверено 12 августа 2019 г.
{{cite web}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Мартин, Роберт С. (2017). Чистая архитектура: руководство для мастера по структуре и дизайну программного обеспечения . Прентис Холл. ISBN 978-0-13-449416-6 . OCLC 1004983973 .