写点什么

探索六边形架构

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

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

关注

评论

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

德邦快递:逆境之下,让数字化辅助业务的利润增长

Kyligence

数据分析 数字化管理 指标中台

GitHub发布即百万!字节内网超实用 java性能优化手册,star超十万

Java你猿哥

Java JVM ssm Java性能调优 java程序优化

大开眼界!Jenkins结合SpringCloud+K8S,打通微服一条龙技术讲解

Java Kubernetes k8s Spring Cloud jenkins

大模型竞争白热化 这家广州的科技公司却开辟了新战场

科技热闻

intellij idea 粘贴字符串如何不带换行符?

源字节1号

微信小程序 开源 软件开发 前端开发 后端开发

Spring Boot如何优雅提高接口数据安全性

Java spring Spring Boot

用scrum敏捷工具做敏捷需求管理

顿顿顿

Scrum 敏捷开发 敏捷项目管理 看板工具

翻遍GitHub帮你总结了一份并发图册+高并发笔记,一次性搞懂并发编程

小小怪下士

Java 程序员 后端 高并发 并发

阿里内部教材:15W字的SpringCloud微服务实战,我一口气给你打包

Java 架构 微服务 Spring Cloud

今年互联网是“银二铜三铁四丐五”?程序员面试如何破局?

Java你猿哥

Java 架构 算法 多线程 java面试

还在分不清各种IO模型?

Java你猿哥

Java Linux io I/O模型 Java IO

兼顾可扩展、高并发与数据一致性:咸鱼优惠系统设计实践

Java你猿哥

Java 架构 ssm 架构设计 并发

用户费力度建设初探

Qunar技术沙龙

去哪儿网 用户费力度

WebSocket与Socket、TCP、HTTP的区别

Apifox

程序员 TCP socket HTTP websocket

软件测试丨Pytest学习笔记-Mark标记、Skip跳过、xFail预期失败

测试人

软件测试 自动化测试 测试开发 pytest

NFTScan 开发者平台发布 CU 付费方案,为 Web3 初创团队提供多链 NFT API 服务

NFT Research

NFT #Web3

Last Week in Milvus

Zilliz

Milvus Zilliz 向量数据库

全新问世!阿里内藏版的SpringBoot 2.5实战笔记,全面覆盖新特性

Java spring 微服务 Spring Boot 框架

做客《创新之路》,Tapdata 创始人唐建法对话央视著名主持人李雨霏,畅聊创业故事

tapdata

网易云信 RTC 音频问题排查的挑战与实践

网易云信

RTC 实时音视频 AIGC

【网易云信】网易云信 RTC 音频问题排查的挑战与实践

网易智企

RTC 实时音视频 AIGC

【活动报名】PolarDB开源数据库&PG中文社区技术沙龙温州站

阿里云数据库开源

数据库 postgresql 阿里云 开源 polarDB

头部企业走入无人区,国产数智化厂商挑大梁

用友BIP

小程序的安全架构解析

Onegun

小程序 安全 小程序容器 小程序架构

从GitHub火到头条!共计1658页的Java岗面试核心MCA版,拿走不谢

Java java面试 Java八股文 Java面试题 Java面试八股文

哪些技术有可能坐上智慧城市发展的快车

Onegun

智慧城市 小程序容器 数字城市

跨平台的Markdown编辑器:Typora for Mac中文版

真大的脸盆

MLCC龙头涨价;车厂砍单芯片;台积电28nm设备订单全部取消!

元器件秋姐

芯片 汽车 资讯 新能源 MLCC

Go_Gin之初体验

神木鼎

golang 日更 gin框架

如何利用java实现一个布隆过滤器?

Java 布隆过滤器

如何在 Mac 上查看显示刷新率

互联网搬砖工作者

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