红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

探索六边形架构

  • 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:5810951
用户头像

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

关注

评论

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

如何使用 GTX750 或 1050 显卡安装 CUDA11+

北桥苏

PyTorch cuda cudnn

风口过后,该重新关注软件内在质量了

neverwinter

程序员 互联网 软件工程 软件质量 软件研发

实例讲解数据库的数据去重

不在线第一只蜗牛

数据库 架构 系统架构 系统

Kurator v0.5.0发布,打造统一的多集群备份与存储体验

华为云开发者联盟

云原生 开发工具 华为云 华为云开发者联盟

碳管理丨三思全景显示方案助力雄安打造数字化能源管理平台

电子信息发烧客

Databend Cloud 如何助力 AIGC 初创公司成本下降百倍

Databend

YashanDB发布会圆满收官,V23.1三大新品引领国产数据库技术与应用突破!

墨天轮

数据库 实时数仓 国产数据库 空间数据库 yashandb

Mate Translate for Mac(翻译软件) v8.1.3中文激活版

mac

苹果mac Windows软件 Mate Translate 多语言翻译软件

OpenGL 坐标系统详解

快乐非自愿限量之名

系统 opengl 坐标

罗拉ROLA-IP代理IP:稳定性、纯净性、响应速度的保证

Geek_ccdd7f

罗拉ROLA-IP代理IP:稳定性、纯净性、响应速度的保证

Geek_ccdd7f

跨境电商

第三方数据测评对比五大品牌HTTP代理!哪家代理最纯净稳定

Geek_ccdd7f

跨境电商

NFT质押挖矿游戏系统开发

薇電13242772558

NFT

大咖专场 | KaiwuDB 多模数据库 - 时序性能优化方案

KaiwuDB

KaiwuDB 大咖专场 数据库性能优化

人工智能:何谓技术

不在线第一只蜗牛

人工智能 AI 人工智能技术

一个java文件的JVM之旅

快乐非自愿限量之名

Java JVM 系统架构

编程中的零代码和低代码解决方案对比

这我可不懂

低代码 零代码 IT开发

2023年度API安全状况详解

EquatorCoco

安全 信息安全 API 接口

iOS加固原理与常见措施:保护移动应用程序安全的利器

雪奈椰子

基于亚马逊云服务器+Grafana Loki日志采集方案部署

王坤祥

Grafana Loki 亚马逊云 亚马逊云科技 AWS EC2

头脑风暴利器!10款超实用的思维导图软件,助你脑洞大开!

彭宏豪95

思维导图 头脑风暴 在线白板 办公软件 思维导图软件

软件测试/测试开发丨接口自动化学习笔记——响应体断言

测试人

软件测试 接口测试

【云栖2023】林伟:大数据AI一体化的解读

阿里云大数据AI技术

大数据 AI

抓住Base主网空投机会:Bitget钱包详细教程

大瞿科技

植根中国 服务中国 英特尔拥抱AI 加速AI PC落地

E科讯

云端大模型有哪些创新使用场景?一个原型方案

魏临

十月份 NFT 市场显示复苏迹象,等待进一步的积极发展

Footprint Analytics

区块链游戏 NFT

2024中国上海国际汽车冲压技术展览会

吹吹晚风

如何 Get 字节跳动同款云原生大数据平台

字节跳动云原生计算

大数据 云原生

亚马逊云 Lightsail:初创公司的福音

天黑黑

云服务器 亚马逊云 VPS

第三方数据测评对比五大品牌HTTP代理!哪家代理最纯净稳定

Geek_ccdd7f

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