六边形架构

端口和适配器架构风格,也叫做六边形架构,能够清晰地区分领域模型和输入输出设备之间的界限。分层系统是一种架构风格,本质是避免耦合的出现。

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

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

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

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

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

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


Shared Everthting

一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力是最差的。

Shared Disk

各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统。Shared Disk 是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好,但是当存储器接口达到饱和的时候,增加节点并不能获得更高的性能。

Shared Nothing

各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,各处理单元之间通过协议通信,并行处理和扩展能力更好。


Reference:

  1. 探索六边形架构