六边形架构认识

微服务架构基础架构

Posted by John Doe on 2020-03-01
Words 777 and Reading Time 2 Minutes
Viewed Times

六边形架构简介

六边形架构由Alistair Cockburn于2005年提出,相较于传统三层架构方式的缺点————不支持多客户端、不支持多数据库、领域层依赖持久层,六边形架构实现了业务逻辑以一种松耦合的形式与多个外部系统通过“适配器-端口”的形式进行集成。某种意义上六边形架构也是一种分层架构,将架构分为了内部和外部但没有了层的概念。六边形架构也称为端口与适配器,在领域驱动设计(DDD)和微服务架构中都出现了六边形架构的身影。

六边形架构结构

六边形架构的六边并不重要,六边只是为了留足空间放置端口和适配器以及用六边形接入多个外部系统视觉上最简洁美观。六边形架构创造者AlistairCockburn最初以六边形来表示这种架构后沿用至今。六边形架构的主要特点是多个适配器和端口形成的划分为内部、外部的架构模式。业务逻辑层可以接入所有满足端口需求的表示层(应用前端、页面)与持久层(数据库)。这种情形可以类比理解java中接口与接口的实现类,所有有满足接口所有方法的类都可以实现接口。
六边形架构alt
上图六边形架构结构图,其中黑箭头为调用关系,白箭头为实现关系。右侧Message为相关消息机制,多用于微服务架构中多个微服务(六边形架构)之间通信,本文不做太多讨论。
由上图可以发现六边形架构的内部(业务逻辑)与外部(APP,WEB,数据库等)完全隔离,只通过adapter适配器进行交互实现了业务逻辑层与持久层的完全解耦,更一步实现“高内聚低耦合”

各部分解读

  • 输入端口:
    用于系统提供服务时暴露API接口,接受外部(前端UI界面、其它微服务)的输入。系统作为服务提供者是对外的接入层可以看成是输入端口。

  • 输出端口:
    为系统获取外部服务提供支持,如获取持久化状态、对结果进行持久化(要求对数据库增删改查操作的接口)。

  • 业务逻辑:
    系统服务的实体类,微服务设计中根据用例、服务复杂程度将大项目(服务)划分为多个小团队可处理的小服务重要参照。

软件开发设计

规范化六边形架构可以如下图所示
其中adapter包下为入站、出站适配器,application包下为入站、出站端口其中BookApplicationService为入站端口BookUaseCase接口的实现类,domin包下为业务逻辑层book为实体类。adapter包下JpaBookRepository接口为出站端口BookRepository接口的继承并具备接口的默认实现方法(jdk8特性)。
六边形架构开发实例


This is copyright.

...

...

00:00
00:00