什么是六边形架构?
学习使用一种称为六边形架构的有趣方法来构建组件。
当整个商业模式(至少针对第一个最小可行产品 MVP)定义完成后,就该开始编写项目代码了。在软件行业中,实现软件的方式多种多样,有些方法效果良好,而有些则不尽如人意。在实施软件时需要牢记的一点是:没有银弹。这意味着并不存在一种可以适用于所有项目的工具、实践或框架。因此,合理的做法是先分析具体问题,再选择最合适的软件架构。
什么是软件架构?
这个术语并不容易定义,因为它会因视角不同而显得抽象。在为企业设计软件时,整个过程可分为三个不同层次:
- 战略层:称为 企业架构,关注组织范围内涉及的流程、应用、基础设施以及相关参与者的问题。
- 解决方案层:称为 解决方案架构,专注于某个特定软件解决方案的相关问题。该方案可能涵盖组织内的多个组件、参与者和具体流程。
- 制品层:称为 软件架构,关注在组件生态系统中某一特定组件的结构与相关问题。它涉及分层、编程语言、设计模式等技术细节。
本文的重点在于如何设计和实现一个具体的组件,如何构建组件内部的各个部分,以及这些部分之间应如何交互。这些正是软件架构所关注的核心问题。同时,它也为我们提供了诸多最佳实践、指导原则和其他支持。
架构抽象的层级
下图展示了架构抽象的不同层级:
![架构抽象层级]
在最顶层,即软件最抽象的表示层级,是系统。一个系统可由一个或多个子系统组成。子系统通常划分为一个或多个层;每一层又常被划分为多个组件;组件则包含类,而类进一步包含数据和方法。
什么是六边形架构?
六边形架构,也被称为 端口与适配器架构(ports and adapters architecture),是一种将业务逻辑与外部世界隔离的架构模式,涉及 API 暴露或数据库集成等问题。判断该模式是否被良好实现的一个方法是:试问自己,如果功能需要通过另一种协议对外暴露,会发生什么?或者如果更换数据库,又会产生什么影响?如果此时必须修改业务逻辑,则说明六边形架构未被正确实现;反之,若无需改动业务逻辑,则表明该模式已被成功应用。
![六边形架构]
该模式由敏捷开发奠基人之一 Alistair Cockburn 提出。如上图所示,该架构以六边形表示,业务逻辑位于中心,外围则是各种适配器。正如 Cockburn 所述,“六边形”这一名称正源于此图形。但需要注意的是,该形状本身对模式的实际实现并无特殊意义。
六边形架构可用于领域驱动设计(DDD)项目中,因为两者相辅相成。虽然并非强制要求,但将二者结合使用是一种良好的实践,因为它们追求的目标高度一致。
为何值得投资六边形架构?
投资六边形架构的首要理由来自成本效益分析。它不仅在技术层面具有优势,在商业层面同样带来显著价值。架构师的核心目标之一,就是尽可能降低软件的开发与维护成本,同时最大化架构对业务的支持能力。
对组织而言,六边形架构最主要的收益体现在资金节约方面。企业每月都会投入大量资金用于软件维护,包括重构甚至重新构建应用程序。六边形架构通过清晰地分离应用的不同部分,有效降低了维护成本。这种职责与层级的明确划分,使我们能够更灵活地演进或变更功能。
例如,当我们需要从 REST 迁移到 gRPC 时,只需调整传输层,其余代码可保持不变。
小结
六边形架构是一种提供组件构建指导的架构模式,其核心在于将业务逻辑与技术实现逻辑相互隔离。