Поговорим о шестиугольной архитектуре
Поговорим о шестиугольной архитектуре

Один из способов научиться писать красивый код — изучить шаблоны проектирования. С момента публикации книги Gof Four «Шаблоны проектирования» появилось бесконечное количество различных книг по шаблонам проектирования. Знакомое чтение таких книг определенно будет полезно для собеседований, но неясно, произойдет ли значительное улучшение навыков программирования. Если вы не сможете понять идеи, лежащие в основе этого, и скопировать их механически, это будет только контрпродуктивно.

Идея, лежащая в основе этого, относится к объектно-ориентированному принципу:

  • Принцип единой ответственности (SRP)
  • Принцип открытости и закрытости (OCP)
  • Принцип замены Рихтера (LSP)
  • Принцип изоляции интерфейса (ISP)
  • Принцип инверсии зависимостей (DIP)

Эти принципы говорят нам, как разумно организовать классы и методы. Наконец, мы разработали программу, которая может удовлетворить: Расширить、Многоразовый、Читабельный。Просто смотреть на эти принципы относительно абстрактно.,Недавно посмотрел шестиугольник Архитектура.,Я думаю, что он играет очень хорошую руководящую роль при написании кода.,Ниже приводится Поговорим о шестиугольной архитектуре。

Что такое шестиугольная архитектура?

Шестиугольная архитектура Архитектура), также известный как порт и адаптер Архитектура (Ports and Adapters Architecture) — это шаблон архитектуры программного обеспечения, целью которого является достижение высокой связности, низкой связанности и тестируемости приложений. Архитектура состоит из Alistair Cockburn Изобретая, он является одним из подписантов Agile-манифеста.

Как вы можете видеть на картинке выше, внутри и снаружи есть два слоя шестиугольников, темно-синего и светло-голубого.

  • Внутренний уровень (темно-синий): отвечает за бизнес-логику в домене.,относительно независимый,Никаких внешних зависимостей или технических подробностей не требуется.,Нет необходимости беспокоиться о внешних клиентах и ​​услугах.,Мы определяем его как доменный слой.
  • Внешний уровень (голубой): отвечает за получение данных из различных бизнес-доменов, сборку бизнес-логики и взаимодействие с внешним миром. Мы определяем его как уровень приложения.

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

Порты и адаптеры

Hexagon Архитектура, также известная как Архитектура портов и Адаптеров, Порты и Адаптеры — две очень ключевые и важные концепции.

порт

порт — это определение приложения,должны быть реализованы посторонними,чтобы приложение могло получать или отправлять информацию,Разъединить. Этот интерфейс в широком смысле,Не только интерфейс,WebAPI Интерфейс, публичные методы некоторых классов также относятся к категории интерфейса.

Существует два типа портов:

  • Входящий порт: бизнес-услуги подвергаются воздействию внешних и общедоступных методов;
  • Исходящий порт: Исходящий порт только один набор методов определения интерфейса.,обеспечить норму,Для достижения исходящего адаптера.

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

Например: если вы хотите читать и писать в базу данных, то вместо непосредственного управления базой данных вы определяете методы чтения и записи в интерфейсе. Приложению не нужно знать, откуда берутся данные или куда их нужно записать. Это может быть база данных, файловая система или кэш, или даже работать одновременно.

адаптер

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

адаптер также делится на два типа:

  • Входящий адаптер: обычно внешний из RestAPI,Обработка внешних запросов путем вызова входящего порта,Это также может быть очередь сообщений или потребитель.,Выполните мониторинг событий,Для управления асинхронным бизнесом,При получении сообщения входящий порт также вызывается для обработки;
  • Исходящий адаптер: Исходящий адаптер реализует исходящий интерфейс.,Вызов внешних служб для реализации полной бизнес-логики,Исходящий адаптер также может быть очередью сообщений от производителя.

Если вы хотите сохранить данные в базу данных,Адаптер Получить данные из определения интерфейса из формата данных,и преобразовать его во что-то, что можно будет записать в базу данных,важно это,Независимо от того, какие изменения в существовании адаптера,Основной домен «Интерфейс» не изменится. Это очень полезно,Изолируйте основную логику приложения и внешнее хранилище.

Именно благодаря этому программа становится стабильной и легко изменяемой.

Почему ее называют шестиугольной архитектурой?

Почему ее называют шестиугольной архитектурой? вместо треугольника?、круглый、А как насчет квадратов?

Нет четкой причины, почему именно шестиугольник, а не какая-то другая форма. Возможно, это просто потому, что шестиугольники выглядят лучше. Или, возможно, этот модуль представляет собой небольшой шестиугольник. Система состоит из множества таких модулей, и между модулями существует входное и выходное взаимодействие, как в сотах.

А соты оказались шестиугольными.

Особенности шестиугольной архитектуры

Автор: Hexagon Архитектура,Ядро приложения стало центром Архитектуры,Иметь четкие границы и обязанности,Эволюция тестов может происходить независимо от внешнего интерфейса. Внешний интерфейсиадаптер отвечает за обработку взаимодействия с внешней системой.,Сохраняйте независимость ядра приложенияи Многоразовый。В основном он имеет следующие характеристики:

  • Высокая связность и низкая связанность: ядро ​​приложения не зависит от внешних зависимостей.,Чтобы изменения в разных частях не повлияли на другие части.,Улучшена поддержка кода.
  • Надежность: ядро ​​приложения можно легко реализовать, поскольку оно не зависит от конкретных внешних компонентов или технических деталей.
  • Доступность: при добавлении нового изадаптера,Легко интегрируется с новой внешней системой.,не затрагивая ядро ​​приложения.

Принципы шестиугольной архитектуры

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

1. Разделение задач. Шестиугольная архитектура делит систему на разные уровни, каждый из которых имеет свои конкретные обязанности и задачи. Такое разделение позволяет каждому компоненту сосредоточиться на своих задачах, уменьшает связанность и улучшает возможность повторного использования и тестирования модуля.

2. Внутреннее и внешнее разделение. Шестиугольная архитектура делит систему на два шестиугольника, внутренний и внешний, представляющие основную бизнес-логику и внешние интерфейсы соответственно. Внутренний шестиугольник отвечает за основную бизнес-логику, а внешний шестиугольник отвечает за интеграцию бизнеса и взаимодействие с внешними системами. Такая конструкция внутреннего и внешнего разделения облегчает расширение системы и адаптацию к изменениям.

3. Внедрение зависимостей. Шестиугольная архитектура поощряет использование внедрения зависимостей для управления зависимостями между компонентами. Благодаря внедрению зависимостей зависимости компонента можно настраивать во время выполнения, а не фиксировать во время компиляции. Это обеспечивает слабую связь между компонентами и облегчает замену и тестирование.

4. Управление интерфейсом. Шестиугольная архитектура делает упор на программирование на основе интерфейсов и способствует обмену данными между компонентами посредством четко определенных интерфейсов и протоколов. Использование интерфейсов отделяет каждый уровень и облегчает расширение.

5. На основе тестирования. Шестиугольная архитектура поощряет использование методов разработки через тестирование (TDD) в процессе разработки. Определите поведение компонента, написав тестовые примеры, а затем постепенно внедряйте и улучшайте компонент, чтобы он соответствовал требованиям теста. Такой подход к разработке на основе тестирования помогает обеспечить качество и стабильность системы.

Основываясь на этих принципах, можно обнаружить, что именно объектно-ориентированные принципы, упомянутые в начале статьи, становятся более практичными после упаковки в гексагональную архитектуру.

Отношения с DDD и микросервисами

При поиске информации о гексагональной архитектуре в Интернете гексагональная архитектура часто упоминается вместе с DDD и микросервисами, но на самом деле между ними нет необходимой связи.

Как и в случае с микросервисами и DDD, здесь нет обязательного соединения, потому что:

1. Концепции субдомена и ограниченного контекста в DDD могут быть сопоставлены с услугами в микросервисах;

2. В микросервисах сервис может разрабатываться командой. Доменная модель DDD также рекомендует, чтобы за него отвечала независимая команда.

Поэтому микросервисы и предметно-ориентированная разработка (DDD) часто упоминаются вместе. При обучении они также будут изучаться вместе. Сотрудничество друг с другом может привести к лучшей реализации.

Если микросервисы — это архитектурный стиль, а DDD — метод архитектурного проектирования, то гексагональная архитектура — это особая архитектурная практика, которая определяет кодирование.

некоторая информация

1. Расширение HexagonalX для VS

Вы можете установить расширение шестиугольной архитектуры в VS. После установки при создании проекта будет доступно больше типов проектов с шестиугольной архитектурой.

image-20231023183747985

2. Несколько примеров проектов и статей на GitHub.

https://github.com/alesimoes/hexagonal-clean-architecture

https://github.com/ivanpaulovich/clean-architecture-manga

https://blog.allegro.tech/2020/05/hexagonal-architecture-by-example.html

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose