2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

探索六边形架构

  • 2014-11-02
  • 本文字数:1119 字

    阅读完需:约 4 分钟

端口和适配器架构风格,也叫做六边形架构,能够清晰地区分领域模型和输入输出设备之间的界限。 lan Cooper 一次演讲中为听众解释了各种架构风格的特性,尤其着重讲解了六边形架构的内容。

分层系统是一种架构风格,它的本质是避免耦合的出现。作为一名具有20 年从业经历的软件开发者及微软的MVP ,lan 相信耦合正是影响软件可维护的最大敌人。尤其是在大规模系统中,耦合的情况越多,想要在进行改动时避免连锁反应就越困难,同时也增加了测试的难度,而对每次改动所造成的影响的理解与合理解释也变得更加困难了。

端口和适配器架构正是一种分层架构,它遵循了分层系统的所有约束与特性。相比起六边形架构,lan 更倾向于使用端口和适配器架构这个名称,因为总有人怀疑六边形的边的数目是否有什么重要意义,其实它并没有任何意义。

一个六边形架构共包括三个层,其中最关键是的领域模型,它包括了所有的应用逻辑与规则。在领域层中不会直接引用技术实现,例如HTTP 上下文或数据库调用,这样就能够确保在技术方面的改动不会影响到领域层面。

包围在领域层之外的是端口层,它负责接收与用例相关的所有请求,这些请求负责在领域层中协调工作。端口层在端口内部作为领域层的边界,在端口外部则扮演了外部实体的角色。

在端口层之外的是适配器层,这一层的技术实现负责以某种格式接收输入、及产生输出。比方如,对于HTTP 请求,适配器会将转换为对领域层的调用,并将领域层传回的响应进行封送,通过HTTP 传回调用客户端。在适配器层不存在领域逻辑,它的唯一职责就是在外部世界与领域层之间进行技术性的转换。适配器能够与端口的某个协议相关联并使用该端口,多个适配器可以使用同一个端口。lan 举了一个例子,在切换到某种新的用户界面时,可以让新界面与老界面同时使用相同的端口。

lan 相信应当专注于对对象行为进行测试,通过对端口直接进行测试,可以忽略用户界面的细节。许多开发者常犯的一个错误是对领域模型的内部细节进行测试,这种方式会影响重构的进程,因为对实现细节的改动将导致测试不通过。正确的单元测试方法是对端口的边界进行测试,边界作为公开的接口,即使它的实现细节发生了变化,接口本身也能保证不受影响。

集成测试仅仅在对配置进行测试时才需要用到,例如在测试 ORM 映射时验证配置是否正确。与之类似,系统测试只在外部边界进行,通过可靠性测试以验证所有的东西都正确地连接在一起了,例如 REST API 能够正常工作,以及类似的一些测试。

Alistair Cockburn 在 2005 年时演示了六边形架构,作为对传统分层架构、耦合与牵连等问题的解决方案。

除此之外还存在着一种变体,就是 Robert C. Martin 在去年谈到干净架构(Clean Architecture)。

查看英文原文: Exploring the Hexagonal Architecture

2014-11-02 04:5812024
用户头像

发布了 428 篇内容, 共 198.2 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

调试 WebSocket API 教程实践

Apifox

程序员 前端 后端 websocket WebSocket API

写给职场新人|从迷茫到屡获殊荣的技术人成长之路

京东科技开发者

企业im即时通讯工具推荐,企业内部即时通讯软件工具怎么选?

BeeWorks

旅游电商的智能化升级:携程景点详情API引领新潮流

技术冰糖葫芦

API 接口 API 测试 pinduoduo API

记一次某节点没有Leader的问题分析

TiDB 社区干货传送门

实践案例 故障排查/诊断 7.x 实践

RocketMQ 存储机制浅析

字节跳动云原生计算

RocketMQ

NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学

汀丶人工智能

text2sql NL2SQL

一个游戏服务器多少钱?价格与配置的完美指南

一只扑棱蛾子

服务器

数仓的两种轻量级数据交换格式:json与jsonb

华为云开发者联盟

数据库 华为云 华为云开发者联盟 华为云GaussDB(DWS) 企业号2024年4月PK榜

TiDB 版本升级常见问题处理(v6.0 及以上版本)

TiDB 社区干货传送门

版本升级 故障排查/诊断

高效的 API 自动化测试

Liam

Jmeter 自动化测试 API测试 测试工具 API 自动化测试

TiDB学习认证之路:数据库界的“快乐大本营”

TiDB 社区干货传送门

社区活动 学习&认证&课程

TiDB 新特性解读 (6.0~6.6)

TiDB 社区干货传送门

管理与运维 版本测评 新版本/特性解读 6.x 实践 7.x 实践

TiDB Vector抢先体验之用TiDB实现以图搜图

TiDB 社区干货传送门

数据库架构选型 新版本/特性解读 数据库前沿趋势

工程中实践的微服务设计模式

京东科技开发者

Kafka 线上性能调优

不在线第一只蜗牛

kafka 分布式

WorkPlus企业即时通讯国密加固-为企业信息安全保障

BeeWorks

BizDevOps全局建设思路:横向串联,纵向深化

嘉为蓝鲸

DevOps Dev Ops BizDevOps

TiDB与MySQL在备份容灾体系的衡量对比

TiDB 社区干货传送门

管理与运维

Python与数据库交互的最佳实践

技术冰糖葫芦

api 货币化 API 接口 pinduoduo API

我们开源啦!一键部署免费使用!Kubernetes上直接运行大数据平台!

智领云科技

开源 大数据平台 K8s 多集群管理

AI从入门到入门之手写数字识别模型java方式Dense全连接神经网络实现

京东科技开发者

云PBX的相关介绍

cts喜友科技

通信 通讯 云通讯

Optimism 黑客松大赛获奖名单公布

Footprint Analytics

AI gamefi Optimism

PTCP认真学习始(不是错别字,啊喂

TiDB 社区干货传送门

社区活动 学习&认证&课程

尝鲜 TiDB 企业管理器TEM 2.1.3 新版本

TiDB 社区干货传送门

监控

Create 2024 分论坛:百度大模型安全解决方案护航开发者一起创造未来

百度安全

HAS2024:华为云以系统性创新加速千行万业智能化升级

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号2024年4月PK榜 HAS2024

探索六边形架构_架构_Jan Stenberg_InfoQ精选文章