使用Go构建的六边形架构:后端工程与分布式系统的深度探索

使用Go构建的六边形架构:后端工程与分布式系统的深度探索

Hexagonal Architecture

本项目是一个深度实践Go语言和六边形架构(又称清洁架构或端口与适配器架构)的示例,它源于以下文章:

深入探讨PostgreSQL、Redis与Go实现的六边形架构

代码库已超越了原始文章中的示例,提供了一个更复杂且全面的应用。

六边形架构简介

六边形架构旨在将核心业务逻辑从外部组件如用户界面、数据库和外部服务中解耦,实现松散耦合。核心业务逻辑通过一系列定义良好的接口(或称为“端口”)对外交互,适配器则负责实现这些接口并集成到外部世界。

架构组件

核心业务逻辑

核心业务逻辑是应用的核心部分,独立于任何外部依赖,以一组用例形式存在,封装了应用程序的行为。

例如,在银行应用中,核心业务逻辑包括创建账户、转账和查看余额等用例。

适配器

适配器在核心业务逻辑与外界之间起桥梁作用,分为主要适配器(Primary Adapter)和次要适配器(Secondary Adapter)。

主要适配器

主要适配器处理来自外部世界的请求,通常是HTTP服务器,接收客户端的HTTP请求,并将其转化为可被核心业务逻辑理解的形式。

例如,在银行应用中,主要适配器是一个HTTP服务器,监听来自客户(如转账或查询余额)的请求,然后将其转化为使用案例供核心业务逻辑使用。

次要适配器

次要适配器负责与核心业务逻辑所依赖的外部资源进行交互,如数据库、消息队列或第三方API。它们实现了由核心业务逻辑定义的端口。

在银行应用中,次要适配器可能包括数据库适配器,用于存储和检索关于账户、交易和其他相关信息的数据。

接口

软件架构中的接口是两个软件组件之间的合同或协议,定义了一组规则或协议,组件需遵循这些规则才能相互通信。在六边形架构中,接口设定了核心业务逻辑与适配器间的边界,允许核心业务逻辑通过接口轻松地与适配器交互,无需关心具体的实现细节。

依赖

这是应用依赖的外部库或服务。它们由适配器管理,不应直接被核心业务逻辑访问,确保核心业务逻辑保持对基础设施和技术选择的独立性。

应用结构概览

项目的组织结构如下:

├── cmd
│   └── main.go
├── .env
├── images
├── go.mod
├── go.sum
└── internal
    ├── adapters
    │   ├── cache
    │   ├── handler
    │   ├── repository
    │   └── tests
    ├── config
    ├── core
    │   ├── domain
    │   ├── ports
    │   └── services
    └── web

结构清晰,使每个组件都有明确的角色和职责。

支付服务与Stripe API集成

支付服务可以采用以下步骤与Stripe API集成:

  1. 创建Stripe账户:首先注册一个Stripe帐户以获取API密钥。
  2. 设置Webhook:在Stripe后台配置Webhook,将事件发送到你的服务器以实时接收支付状态更新。
  3. 创建支付端点:在核心业务逻辑中定义支付端口,处理创建支付请求。
  4. 适配器实现:实现次要适配器(例如payment_adapter),使用Stripe的Go库创建PaymentIntents,并返回client_secret。
  5. 确认支付:当客户端完成支付流程后,使用client_secret调用Stripe API确认支付。
  6. 处理Webhook事件:当Stripe发送支付成功的Webhook时,解析事件数据,并存储相关支付信息到本地数据库。
  7. 业务逻辑响应:基于接收到的支付状态更新业务逻辑,如更新订单状态。

通过这种方式,六边形架构使得支付处理与核心业务逻辑保持分离,易于替换或扩展支付服务提供商。

总结起来,这个开源项目提供了一个全面的六边形架构实现,让你能够深入了解如何在Go中构建松散耦合、可测试、可维护的后端系统。其特性包括清晰的代码结构、支持多种外部适配器以及与流行服务(如Stripe)的集成,为你的下一个项目提供了强大的起点。如果你正在寻找一种方式来优化你的后端设计,那么这个项目值得一试。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郎轶诺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值