写点什么

探索六边形架构

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

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

关注

评论

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

合规性管理101:流程、规划和挑战

龙智—DevSecOps解决方案

合规性 合规性管理

数字化赋能三农 农行、邮储如何保“质”更保“智”?

CECBC

利用wvs扫描网站发现一个页面,暴露了错误信息

喀拉峻

网络安全

受Prometheus启发的开源日志工具:Loki

yuexin_tech

sparksql内核解析-读书笔记

聚变

IM全文检索技术专题(四):微信iOS端的最新全文检索技术优化实践

JackJiang

全文检索 微信 IM 即时通讯IM

网络标准之:IANA定义的传输编码

程序那些事

Java 网络协议 nio 程序那些事 2月月更

Web 键盘输入法应用开发指南(1) —— 基本概念

天择

JavaScript 键盘 输入法

元宇宙房地产演绎新“美国梦”

CECBC

学习黑客十余年,如何成为一名安全工程师?

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

比5G还快10倍,你准备好迎接万兆通信了吗?

脑极体

如何恢复MAC苹果电脑系统数据文件?

茶色酒

EasyRecovery15

如何在 Vue 中加入图表 - Vue echarts 使用教程 - 卡拉云

蒋川

Vue Vue 3

最好用的 12 款 Vue Timepicker 时间日期选择器测评推荐 - 卡拉云

蒋川

Vue Vue 3

开年上云,寻找“好云”推荐官——千元大奖等你赢

阿里云弹性计算

征文活动 玩转ECS

Jira组织架构管理哪家强?

龙智—DevSecOps解决方案

Jira组织架构管理 Jira组织架构 Jira插件

电动汽车行业蓬勃发展,是时候关注电动汽车软件了

龙智—DevSecOps解决方案

电动汽车 电动汽车市场 电动汽车软件

5G时代的海洋之歌

脑极体

如何提升专注力?

石云升

职场经验 2月月更 专注力

cdr2022无需序列号和密钥 直接安装即可激活

茶色酒

cdr2022

墨天轮国产数据库沙龙 | 张玮绚:TDengine,高性能、分布式、支持SQL的时序数据库

墨天轮

数据库 tdengine 国产数据库

2021年证券应用活跃度高速提升,用户粘性进一步释放

易观分析

证券市场

免费get | 版本控制软件全功能版

龙智—DevSecOps解决方案

perforce Perforce Helix Core 版本控制软件

华为在MWC2022为全球开发者带来HMS创新工具,全面提升消费者体验

最新动态

物联网平台的基础概念

dgiot

加密货币使得俄罗斯更容易规避制裁

CECBC

水果最新FL Studio20.9.1汉化功能详解

茶色酒

Fl fl20.9

【C语言】判断语句以及分支语句《详细讲解》

謓泽

C语言 2月月更

亚信科技AntDB与华为鲲鹏完成产品互认证

亚信AntDB数据库

AntDB 华为鲲鹏

北纬科技三步走完成DevOps转型

阿里云云效

云计算 阿里云 DevOps 云原生 #运维

最好用的 7 个 Vue Tree select 树形组件 - 卡拉云

蒋川

Vue Vue 3

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