定义
六边形架构(Hexagonal Architecture),也被称为端口适配器架构(Ports and Adapters Architecture)或者洋葱架构(Onion Architecture)是一种面向对象软件架构设计模式,旨在使软件系统更加灵活、可测试、可维护和可扩展。
核心部分
六边形架构(Hexagonal Architecture)通常分为三个主要部分:应用程序核心、输入适配器和输出适配器。
1.应用程序核心
应用程序核心是六边形架构的核心部分,包含业务逻辑和领域模型。
应用程序核心与输入适配器和输出适配器解耦,不包含与输入或输出相关的细节。
它只负责处理业务逻辑,而不考虑如何接收或发送数据。
2.输入适配器
输入适配器负责将外部系统发送的请求转换为应用程序核心可以处理的格式。
它将请求转换为应用程序核心可以理解的数据类型,并将其发送到应用程序核心。
输入适配器还负责验证请求的有效性,并处理任何与输入相关的错误。
3.输出适配器
输出适配器负责将应用程序核心返回的结果转换为外部系统可以理解的格式。
它将应用程序核心返回的数据转换为外部系统可以理解的数据类型,并将其发送到外部系统。
输出适配器还负责处理任何与输出相关的错误。
六边形架构的主要原则
分离关注点
应用程序核心应该专注于实现业务逻辑,而不是与输入或输出相关的细节。输入适配器和输出适配器负责将数据从外部系统传递到应用程序核心中,并从应用程序核心中传递数据到外部系统中。
可测试性
六边形架构的应用程序核心应该是可测试的,因为它与输入和输出适配器解耦,可以使用模拟对象或者测试替身来测试。
可维护性
应用程序核心应该是可维护的,因为它是业务逻辑的核心,没有与输入或输出相关的细节。
可扩展性
六边形架构的应用程序核心应该是可扩展的,因为它与输入和输出适配器解耦,可以通过添加新的输入适配器或输出适配器来扩展系统。
端口和适配器
六边形架构中的输入适配器和输出适配器可以看作是系统与外部系统之间的接口。应用程序核心通过端口与适配器进行通信,而适配器则将数据转换为应用程序核心可以处理的格式。
洋葱结构
六边形架构的应用程序核心被视为洋葱的内核,而输入适配器和输出适配器则被视为洋葱的外皮。这种结构使得应用程序核心与输入输出适配器之间有一个清晰的分界线,使得系统更加易于理解和维护。
使用案例
购物车系统
- 输入适配器:网站的前端应用程序通过Web API向购物车系统发送请求。输入适配器的主要责任是将这些请求转换为购物车系统可以处理的格式,并将其传递给应用程序核心。
- 应用程序核心:购物车系统的核心功能是管理用户的购物车。它负责处理输入适配器中的请求,执行添加、删除、修改商品等操作,并返回结果。
- 输出适配器:购物车系统还需要将用户的购物车信息持久化到数据库中,因此需要一个输出适配器来完成这个任务。输出适配器的主要责任是将应用程序核心返回的结果转换为数据库可以处理的格式,并将其存储到数据库中。
银行账户管理系统
- 应用程序核心:应用程序核心是银行账户管理系统的核心部分,包含业务逻辑和领域模型。它负责处理账户的存款、取款、转账等操作,以及计算账户余额。应用程序核心只关心业务逻辑,不考虑如何接收或发送数据。
- 输入适配器:输入适配器负责将外部系统发送的请求转换为应用程序核心可以处理的格式。例如,银行账户管理系统可以提供一个Web API,使用HTTP协议接收客户端请求。输入适配器的主要职责是将这些HTTP请求转换为应用程序核心可以处理的格式,并将其传递给应用程序核心。
- 输出适配器:输出适配器负责将应用程序核心返回的结果转换为外部系统可以理解的格式。例如,银行账户管理系统需要将账户余额信息存储到数据库中。输出适配器的主要职责是将应用程序核心返回的数据转换为数据库可以处理的格式,并将其存储到数据库中。