云生态系统的六边形架构

为了帮助管理云计算的复杂性,麦当劳的开发人员正在使用六边形架构模式--请继续阅读,了解该解决方案的具体内容。

作者:解决方案架构师经理 Adam Rice

随着越来越多的公司进行数字化转型和系统现代化,开发人员面临着在各种分布式系统之间进行集成的日益复杂的问题。

在多篇系列博客中,我将详细介绍一种潜在的解决方案,以帮助管理云生态系统中的复杂性: 六边形架构。

下面我将解释

  1. 什么是六边形架构
  2. 架构的组成

什么是六边形架构

六边形架构是一种将外部系统与核心应用程序分离的架构模式。

想法很简单。从六边形开始。应用端口和适配器,对吗?

六边形有六条边。从理论上讲,我们的形状可以有 100 条边来解释应用程序中的所有交互。

六边形本身并不意味着什么。它只是提供了一种简洁的方式来讨论和解释应用程序的端口、适配器和域。

这种形状提供了一种方法来解释应用程序流程的一小部分,而不会让受众对应用程序的全貌感到不知所措。从本质上讲,它限制了设计者一次只能设计或解释一小部分易于理解的内容。

让我们从内部开始

应用领域位于六边形内部。我们所说的领域是指遵循领域驱动设计(DDD)的原则,我们的业务逻辑不会泄露到六边形之外。就上下文而言,领域驱动设计

  1. 通过定义与特定业务相关的模型来关注主要问题。
  2. 使用所有团队成员都能理解的通用语言。
  3. 定义封装领域模型的有界上下文。

按照 DDD 原则,为了这篇文章的目的,我使用下面的流程提出了以下领域。

假设我们正在构建一个新的应用程序,允许用户通过网站将文件上传到一个中央资源库进行共享。

以下是一些基本的应用要求: 

  1. 文件由经过认证的用户通过网站上传。
  2. 文件是为程序上传的,也可以说是为目的上传的。
  3. 程序/用途是一组预先配置的文件规范,文件必须遵守这些规范。
  4. 程序规则规定的内容包括

- 可上传的文件类型

- 字段数量

- 其他要求,如加密或压缩文件

- 文件必须符合特定规格才能被接受。

  1. 用户必须有权限(授权)上传特定程序的文件。

回到域

域代表应用程序的关键业务逻辑,它允许用户将文件上传到存储库,以便与其他各方共享。请注意,下面的域只包括上传者、上传者的授权和要上传文件的文件规格。

蓝色矩形称为实体,与蓝色域一起代表满足我们的功能要求所需的结构。

一个更详尽的领域模型可以包括上传或下载文件的下载器和文件配置细节,以及可能应用的数据质量配置。可以说,所有这些都可以进一步划分为子领域,但为了简洁起见,我们将坚持使用当前的示例。

从逻辑上讲,我们的六边形现在看起来是这样的:

还记得我们之前说过的话吗?六边形架构的原则之一是,领域不会泄露到六边形之外,也不需要了解外部世界的任何情况。

此时,理论上我们可以从业务逻辑功能的角度编写满足该应用程序基本要求的代码。这将是最纯粹的应用程序代码开发。然而,这对我们并没有什么帮助,因为业务逻辑被包裹在六边形的外部边界内。

我们需要一些输入和输出,因此我们现在要对如何与我们的领域进行交互做出一些假设。

最简单的假设如下

用户以请求信息或上传文件的形式提交数据。输入

这些数据经过验证、转换并存储在某个地方。输出

我们需要与该域进行交互,使其能够完成工作,即授权上传者、接受文件并检查文件规格(基于程序/用途)的有效性。

让我们稍作休息,因为上述两个步骤带来了这种架构的另一个好处。在这种纯粹的形式下,可以实现单元测试或测试驱动开发(TDD)。

编写自动化单元测试,在开发过程中或进行增强时运行,可以降低引入错误的风险,提高代码质量,尤其是在单元测试作为代码签入和部署活动的一部分运行时(想想 CI/CD)。

如果遵循TDD,那么在编写任何功能代码之前,首先要编写代码中的单元测试。测试会失败,因为还没有编写任何功能代码。因此,要编写满足测试要求的功能代码。然后再编写下一个测试,接着编写功能代码,然后再编写测试,依此类推。

本周就到这里。现在我们已经确定了什么是六边形架构,并创建了领域模型,下周我们将探讨如何连接端口和适配器,以便开始管理架构的复杂性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
六边形架构,也称为端口适配器架构,是一种软件架构模式,主要用于分离应用程序的业务逻辑和外部依赖。其目录结构如下: ``` app ├── adapters │ ├── inbound # 应用程序的入站适配器 │ │ ├── controllers # 控制器层,处理HTTP请求或其他协议的请求 │ │ ├── gateways # 网关层,处理与外部系统的通信 │ │ ├── presenters # 表示层,负责将业务逻辑的结果转换为适合显示的格式 │ │ └── usecases # 用例层,提供可重用的用例操作 │ └── outbound # 应用程序的出站适配器 │ ├── database # 数据库层,处理与数据库的交互 │ └── messaging # 消息队列层,处理与消息队列的交互 ├── config # 应用程序的配置 ├── domain # 应用程序的业务逻辑 │ ├── entities # 实体层,定义应用程序中的核心概念 │ ├── repositories # 仓储层,定义实体的操作接口 │ └── services # 服务层,提供应用程序的核心业务逻辑 └── main.go # 应用程序的入口文件 ``` 其中,`adapters`目录包含了应用程序的入站和出站适配器,用于处理来自外部系统的请求和与外部系统的通信。`inbound`目录包含了控制器、网关、表示和用例层,负责接收和处理来自外部系统的请求,并将其转换为业务逻辑操作。`outbound`目录包含了数据库和消息队列层,负责与这些外部系统的交互。`config`目录包含了应用程序的配置文件。`domain`目录包含了应用程序的业务逻辑,包括实体、仓储和服务层。`main.go`文件是应用程序的入口文件,用于启动应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值