Hexagonal architectures for microservices 微服务的六边形架构
六边形架构 Hexagonal Architecture 也被称为接口与适配器架构 Prots and Adapters Architecture, 是一种软件架构模式, 旨在实现高内聚、低耦合和可测试性的应用程序设计. 该架构由 Alistair Cockburn 发明, 他是敏捷宣言的签署者之一. 该架构是说, 在任何应用程序中, 都有一个核心逻辑实现服务, 并且在该服务周围"附加"上一些接口, 用于核心与外部组件的交互.
例如, 一个 web API 就是一个适配器 adapter, 帮助核心逻辑与互联网上的 web 客户端交流. 对于数据库也是一样的, 其也是一个外部组件, 帮助服务维护数据. 如果我们需要, 应该要能迁移到其他的数据库, 并且服务仍然是相同的. 因此, 数据库也是一个适配器 adapter.
上述架构可通过在核心业务逻辑层与适配器之间构建接口 ports 来实现.
在处理核心业务逻辑与适配器之间的关系时, 应用依赖反转原则 dependency inversion principle:
高层模块不应该依赖底层细节.
相反, 两者都应该依赖抽象. 以数据存储为例, 我们应当通过统一的接口进行操作, 无需理解数据库的具体实现细节. 无论是 SQL 数据库、NoSQL 数据库还是缓存存储系统, 都应该使用相同的接口规范.抽象不应依赖于具体实现, 而具体实现应依赖于抽象.
以业务层与数据层之间的接口设计为例, 必须确保接口不会因数据库实现细节的变动而修改, 相反地, 我们通过调整数据层实现来适配接口规范.这意味着数据层依赖于接口定义, 而非接口依赖于数据层实现.
依赖反转的概念经常同控制反转与依赖注入的概念一同出现, 这些是相关但是不同的概念.
依赖反转原则反转了什么? 这个原则改变了构建软件的思路, 与传统先实现底层细节然后再在其上构建接口的做饭相反, 依赖倒置原则鼓励我们先考虑接口, 然后再针对这些接口实现底层细节.