Один из способов научиться писать красивый код — изучить шаблоны проектирования. С момента публикации книги Gof Four «Шаблоны проектирования» появилось бесконечное количество различных книг по шаблонам проектирования. Знакомое чтение таких книг определенно будет полезно для собеседований, но неясно, произойдет ли значительное улучшение навыков программирования. Если вы не сможете понять идеи, лежащие в основе этого, и скопировать их механически, это будет только контрпродуктивно.
Идея, лежащая в основе этого, относится к объектно-ориентированному принципу:
Эти принципы говорят нам, как разумно организовать классы и методы. Наконец, мы разработали программу, которая может удовлетворить: Расширить、Многоразовый、Читабельный。Просто смотреть на эти принципы относительно абстрактно.,Недавно посмотрел шестиугольник Архитектура.,Я думаю, что он играет очень хорошую руководящую роль при написании кода.,Ниже приводится Поговорим о шестиугольной архитектуре。
Шестиугольная архитектура Архитектура), также известный как порт и адаптер Архитектура (Ports and Adapters Architecture) — это шаблон архитектуры программного обеспечения, целью которого является достижение высокой связности, низкой связанности и тестируемости приложений. Архитектура состоит из Alistair Cockburn Изобретая, он является одним из подписантов Agile-манифеста.
Как вы можете видеть на картинке выше, внутри и снаружи есть два слоя шестиугольников, темно-синего и светло-голубого.
Контекст в фиолетовой части на рисунке выше — это то, что мы добавили во время практики. При выполнении логической сборки на уровне приложения, если нет понятия бизнес-контекста, многие методы будут вызываться повторно, поэтому контекст будет инициализироваться на уровне приложения. бизнес-вход, управляющий контекстом по всей цепочке вызовов.
Hexagon Архитектура, также известная как Архитектура портов и Адаптеров, Порты и Адаптеры — две очень ключевые и важные концепции.
порт — это определение приложения,должны быть реализованы посторонними,чтобы приложение могло получать или отправлять информацию,Разъединить. Этот интерфейс в широком смысле,Не только интерфейс,WebAPI Интерфейс, публичные методы некоторых классов также относятся к категории интерфейса.
Существует два типа портов:
Обработка приложений с помощью Портов и адаптеров ввода и вывода.,порт - это просто абстракция,Это способ приложения взаимодействовать с внешним миром, ничего не зная о его содержимом.
Например: если вы хотите читать и писать в базу данных, то вместо непосредственного управления базой данных вы определяете методы чтения и записи в интерфейсе. Приложению не нужно знать, откуда берутся данные или куда их нужно записать. Это может быть база данных, файловая система или кэш, или даже работать одновременно.
Адаптер — это мост, соединяющий ядро приложения и внешний интерфейс. Он отвечает за преобразование внешних запросов в формат, понятный ядру приложения, и преобразование ядра ответов в формат, который может принять внешний интерфейс.
адаптер также делится на два типа:
Если вы хотите сохранить данные в базу данных,Адаптер Получить данные из определения интерфейса из формата данных,и преобразовать его во что-то, что можно будет записать в базу данных,важно это,Независимо от того, какие изменения в существовании адаптера,Основной домен «Интерфейс» не изменится. Это очень полезно,Изолируйте основную логику приложения и внешнее хранилище.
Именно благодаря этому программа становится стабильной и легко изменяемой.
Почему ее называют шестиугольной архитектурой? вместо треугольника?、круглый、А как насчет квадратов?
Нет четкой причины, почему именно шестиугольник, а не какая-то другая форма. Возможно, это просто потому, что шестиугольники выглядят лучше. Или, возможно, этот модуль представляет собой небольшой шестиугольник. Система состоит из множества таких модулей, и между модулями существует входное и выходное взаимодействие, как в сотах.
А соты оказались шестиугольными.
Автор: Hexagon Архитектура,Ядро приложения стало центром Архитектуры,Иметь четкие границы и обязанности,Эволюция тестов может происходить независимо от внешнего интерфейса. Внешний интерфейсиадаптер отвечает за обработку взаимодействия с внешней системой.,Сохраняйте независимость ядра приложенияи Многоразовый。В основном он имеет следующие характеристики:
Когда мы говорим о шестиугольной архитектуре, мы подразумеваем несколько основных принципов. Эти принципы побуждают нас постоянно оптимизировать архитектуру программного обеспечения, чтобы система сохраняла свою общую стабильность.
1. Разделение задач. Шестиугольная архитектура делит систему на разные уровни, каждый из которых имеет свои конкретные обязанности и задачи. Такое разделение позволяет каждому компоненту сосредоточиться на своих задачах, уменьшает связанность и улучшает возможность повторного использования и тестирования модуля.
2. Внутреннее и внешнее разделение. Шестиугольная архитектура делит систему на два шестиугольника, внутренний и внешний, представляющие основную бизнес-логику и внешние интерфейсы соответственно. Внутренний шестиугольник отвечает за основную бизнес-логику, а внешний шестиугольник отвечает за интеграцию бизнеса и взаимодействие с внешними системами. Такая конструкция внутреннего и внешнего разделения облегчает расширение системы и адаптацию к изменениям.
3. Внедрение зависимостей. Шестиугольная архитектура поощряет использование внедрения зависимостей для управления зависимостями между компонентами. Благодаря внедрению зависимостей зависимости компонента можно настраивать во время выполнения, а не фиксировать во время компиляции. Это обеспечивает слабую связь между компонентами и облегчает замену и тестирование.
4. Управление интерфейсом. Шестиугольная архитектура делает упор на программирование на основе интерфейсов и способствует обмену данными между компонентами посредством четко определенных интерфейсов и протоколов. Использование интерфейсов отделяет каждый уровень и облегчает расширение.
5. На основе тестирования. Шестиугольная архитектура поощряет использование методов разработки через тестирование (TDD) в процессе разработки. Определите поведение компонента, написав тестовые примеры, а затем постепенно внедряйте и улучшайте компонент, чтобы он соответствовал требованиям теста. Такой подход к разработке на основе тестирования помогает обеспечить качество и стабильность системы.
Основываясь на этих принципах, можно обнаружить, что именно объектно-ориентированные принципы, упомянутые в начале статьи, становятся более практичными после упаковки в гексагональную архитектуру.
При поиске информации о гексагональной архитектуре в Интернете гексагональная архитектура часто упоминается вместе с 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