什么是六边形架构
六边形架构(Hexagonal Architecture)也被称为端口与适配器架构(Ports and Adapters Architecture),是一种软件设计模式,旨在创建松散耦合的应用程序组件,这些组件可以轻松连接到其软件环境。它将系统划分为几个可互换的组件,如应用程序核心、数据库、用户界面以及与其他系统的接口。每个组件通过一些暴露的"端口"与其他组件相连,这些端口定义了一个抽象API,可以通过各种方式实现,如方法调用、远程过程调用或Web服务。端口的数量和粒度没有限制,它们可以代表不同的用途,如事件源、通知、数据库访问和管理。适配器充当组件与外部世界之间的粘合剂,调整外部世界与端口之间的交互。单个端口可以有多个适配器,允许以不同的方式与组件交互,如通过GUI、命令行界面、自动化数据源或测试脚本。术语"六边形"来自将应用程序组件表示为六边形单元的图形约定,旨在留出足够的空间来表示组件与外部世界之间所需的不同接口,而不是暗示有六个端口。
六边形架构的工作原理是什么
六边形架构的核心思想是将系统划分为多个松散耦合的可互换组件,例如应用程序核心、数据库、用户界面、测试脚本以及与其他系统的接口。这种方法是传统分层架构的替代方案。
组件与端口
每个组件通过一些暴露的"端口"与其他组件相连。通过这些端口的通信遵循特定的协议,取决于它们的用途。端口和协议定义了一个抽象API,可以通过任何合适的技术手段(如面向对象语言中的方法调用、远程过程调用或Web服务)来实现。
端口粒度
端口的粒度及其数量没有限制。在极端情况下,如果需要,每个用例可能都有不同的端口。通常,有用于事件源(用户界面、自动输入)、通知(传出通知)、数据库(为了将组件与任何合适的DBMS接口)和管理(用于控制组件)的端口。
适配器
适配器是组件与外部世界之间的粘合剂。它们定制了外部世界与代表应用程序组件内部需求的端口之间的交换。一个端口可以有多个适配器,例如,数据可以通过GUI或命令行界面由用户提供,也可以由自动化数据源或测试脚本提供。
六边形架构有哪些优势
六边形架构的优势主要体现在以下几个方面:
松散耦合的可互换组件
六边形架构将系统划分为多个松散耦合的可互换组件,如应用核心、数据库、用户界面、测试脚本和与其他系统的接口等。这使得任何层级的组件都可以被替换,并且有利于测试自动化。
对称组件设计
六边形架构利用表现层和数据源层之间的相似性,创建了由核心部分和接口组成的对称组件。这种设计使得组件结构更加清晰,易于理解和维护。
外部化基础设施
与洋葱架构类似,六边形架构通过接口将基础设施外部化,确保了应用程序与数据库之间的松散耦合。这种设计有利于提高系统的灵活性和可扩展性。
促进自动化测试
由于组件之间的松散耦合性,六边形架构有利于自动化测试的实施。测试脚本可以作为一个独立的组件与系统其他部分进行集成,从而提高了测试的效率和质量。
六边形架构的类型有哪些
六边形架构的主要类型包括以下几种:
洋葱架构
洋葱架构由Jeffrey Palermo于2008年提出,与六边形架构类似,它也通过接口将基础设施外部化,确保应用程序与数据库之间的松散耦合。它进一步使用控制反转将应用程序核心分解为几个同心环。
整洁架构
整洁架构由Robert C. Martin于2012年提出,结合了六边形架构、洋葱架构和其他几种变体的原理。它以同心环的形式提供了组件的更多细节层次,并将适配器和接口(用户界面、数据库、外部系统、设备)隔离在外环,而将用例和实体留在内环。整洁架构使用了依赖反转原则,严格规定依赖关系只能存在于外环到内环的方向,而不能反过来。
其他变体
除了上述两种主要类型外,六边形架构还存在一些其他变体,它们在细节上有所不同,但都遵循了六边形架构的核心原则,即将应用程序核心与外部系统解耦,通过接口进行交互。
六边形架构的组成部分有哪些
六边形架构是一种将系统划分为多个松散耦合、可互换的组件的架构模式。它的主要组成部分包括:
应用核心
应用核心是整个系统的核心业务逻辑所在。它与其他组件通过暴露的"端口"进行交互,端口的粒度和数量没有限制,可根据需求进行调整。
数据库
数据库组件负责存储和管理系统所需的数据。它通过适配器与应用核心的端口连接,实现数据的读写操作。
用户界面
用户界面组件负责向用户呈现系统功能,并接收用户的输入。它也通过适配器与应用核心的端口连接,将用户输入转换为应用核心可识别的命令。
测试脚本
测试脚本组件用于对系统进行自动化测试。它可以直接与应用核心的端口交互,模拟真实的用户场景并验证系统行为。
外部系统接口
外部系统接口组件负责与其他系统进行集成。它通过适配器将外部系统的数据和命令转换为应用核心可识别的格式,实现跨系统通信。
适配器
适配器是连接各个组件与应用核心端口的"粘合剂"。它们根据端口的需求,对外部世界的输入输出进行转换和调解。
如何搭建六边形架构
六边形架构是一种将系统划分为多个松散耦合的可互换组件的架构方式,如应用程序核心、数据库、用户界面、测试脚本和与其他系统的接口等。每个组件通过一些暴露的"端口"与其他组件相连,通过这些端口的通信遵循特定的协议,取决于它们的用途。端口和协议定义了一个抽象的API,可以通过任何合适的技术手段来实现,如方法调用、远程过程调用或Web服务。
端口和适配器的设计
端口的粒度和数量没有限制,某些情况下只需要一个端口,而通常情况下会有事件源、通知、数据库和管理等端口。在极端情况下,每个用例可能都有不同的端口。适配器充当组件与外部世界之间的粘合剂,调整外部世界与端口之间的交互。一个端口可以有多个适配器,如GUI、命令行界面、自动化数据源或测试脚本。
实现六边形架构
在实现六边形架构时,首先需要确定系统的主要组件,如应用程序核心、数据库、用户界面等。然后为每个组件定义端口,并设计适配器来连接端口与外部世界。端口和适配器的设计应该遵循单一职责原则,每个端口和适配器只负责一个特定的功能。
组件之间的通信
组件之间通过端口进行通信,遵循特定的协议。这些协议定义了一个抽象的API,可以通过任何合适的技术手段来实现。例如,一个组件可以通过HTTP协议与另一个组件通信,而另一个组件可以通过消息队列与第三个组件通信。 通过这种方式,六边形架构实现了组件之间的松散耦合,使得每个组件都可以独立地进行开发、测试和部署,而不会影响其他组件。同时也提高了系统的可维护性和可扩展性,因为任何组件都可以被替换或升级,而不会影响整个系统的运行。
六边形架构有哪些应用场景
六边形架构在以下几种应用场景中具有优势:
支持多种界面和集成方式
六边形架构将系统划分为松散耦合的可互换组件,每个组件通过"端口"与其他组件连接。这种设计使得系统能够轻松地支持多种用户界面(如GUI、命令行、Web服务等)和与外部系统的集成方式。只需为每个新的界面或集成点开发一个新的适配器,而不需要修改核心业务逻辑。
促进模块化和微服务
六边形架构将系统划分为独立的模块化组件,每个组件都有明确定义的职责和接口。这种模块化设计有利于构建微服务架构,因为每个组件都可以独立部署、测试和扩展。
提高可测试性
由于六边形架构将外部依赖与核心业务逻辑分离,因此可以使用模拟对象或测试替身测试核心逻辑,而无需启动整个系统。这种方式大大提高了系统的可测试性。
支持演进和技术迁移
六边形架构的松散耦合特性使得系统能够渐进式地演进和迁移到新技术。只需为新技术开发新的适配器,而不需要重写整个系统,降低了技术迁移的风险和成本。
适用于遗留系统现代化
对于遗留系统,六边形架构提供了一种将其现代化的途径。可以将遗留系统封装为六边形架构中的一个组件,然后逐步用新组件替换旧组件,实现渐进式现代化。
六边形架构与单体架构的区别是什么
六边形架构与单体架构的区别在于它们分别属于不同的领域和概念。单体架构是指将整个应用程序构建为单个、不可分割的单元,所有功能都打包在一个可执行文件。而六边形架构是一种软件设计模式,旨在将系统划分为松散耦合的可互换组件,通过"端口"和"适配器"进行连接。这种方法的目标是避免层与层之间的依赖关系,防止用户界面代码与业务逻辑代码混杂在一起。六边形架构的名称来源于将应用程序组件用六边形图形表示的约定,而非指代特定数量的端口。因此,单体架构描述的是物理结构的单一性,而六边形架构则关注软件设计中的模块化和解耦。
六边形架构面临的挑战是什么
六边形架构面临的主要挑战是术语"六边形"本身的误导性。这个术语来自图形表示中将应用程序组件绘制为六边形单元的惯例,但其目的并非暗示会有六个边界或端口,而是为了留出足够的空间表示组件与外部世界之间所需的不同接口。
术语"六边形"的误导性
尽管被称为"六边形"架构,但实际上这种架构只包含四个关键部分:应用程序核心、端口、适配器和外部服务。术语"六边形"的使用可能会给人一种错误的印象,认为这种架构必须由六个不同的部分组成,而事实并非如此。
隐藏了服务提供者和消费者的不对称性
根据马丁·福勒(Martin Fowler)的观点,六边形架构的优点在于表现层和数据源层之间的相似性,可以创建由核心和接口组成的对称组件。但它也存在一个缺点,即隐藏了服务提供者和服务消费者之间固有的不对称性,而这种不对称性更适合用层次结构表示。
六边形架构的发展历程是怎样的
六边形架构的发展历程可以概括为以下几个阶段:
起源与命名
六边形架构最初由Alistair Cockburn在2005年提出,旨在避免面向对象软件设计中已知的结构缺陷,如层与层之间不必要的依赖关系以及用户界面代码与业务逻辑的混杂。Cockburn最初将其命名为"端口与适配器"架构,并在2005年首次在波特兰模式库Wiki上讨论了这一概念。
与微服务架构的关系
一些作者认为,六边形架构是微服务架构的起源。2008年,Jeffrey Palermo提出的洋葱架构与六边形架构类似,它们都通过接口将基础设施外部化,以确保松散耦合。2012年,Robert C. Martin提出的整洁架构结合了六边形架构、洋葱架构以及其他几种变体的原则。
全面阐述
2024年4月,Cockburn与Juan Manuel Garrido de Paz合著了一本全面阐述六边形架构的著作,系统地介绍了这一架构理念。该书的出版标志着六边形架构理论体系的完善和成熟。
亚马逊云科技热门云产品
Amazon Lambda
运行代码,无需顾虑服务器
Amazon Budgets
设置自定义成本和使用率预算
Amazon Polly
将文本转化为逼真的语音
Amazon Transcribe
自动语音识别
欢迎加入亚马逊云科技培训中心
欢迎加入亚马逊云科技培训中心
-
快速上手训练营
-
账单设置与查看
-
动手实操
-
快速上手训练营
-
第一课:亚马逊云科技简介
本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。
亚马逊云科技技术讲师:李锦鸿第二课:存储与数据库服务
您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。
亚马逊云科技资深技术讲师:周一川第三课:安全、身份和访问管理
在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。
亚马逊云科技技术讲师:马仲凯 -
账单设置与查看
-
-
动手实操
-