项目介绍:go-clean-arch
go-clean-arch 项目是一个在 Go (Golang) 编程语言中实现的清晰架构示例。该项目的主要目的是展示如何在软件开发中应用 Uncle Bob 提出的清晰架构原则,从而构建一个灵活、可测试且独立于框架、用户界面、数据库以及任何外部机构的系统。
清晰架构原则
根据 Uncle Bob 的定义,清晰架构应具备以下特征:
- 独立于框架:架构不依赖于某些复杂的软件库,这样可以灵活地将不同框架作为工具来使用,而不是让系统适应框架的限制。
- 可测试性:业务规则可以在不依赖于用户界面、数据库、Web 服务器或其他外部元素的情况下进行测试。
- 独立于用户界面:用户界面可以轻松更改,而不影响系统的其他部分。例如,可以将 Web 界面替换为控制台界面,而无需更改业务规则。
- 独立于数据库:可以随意更换数据库类型,例如,从 Oracle 或 SQL Server 切换到 MongoDB、BigTable 或 CouchDB,而不影响业务规则。
- 独立于任何外部代理:业务规则对外部世界一无所知,从而保持了高度的独立性和通用性。
项目架构层次
该项目架构被分为四个域层:
- Models 层:负责数据模型的定义。
- Repository 层:用于数据存取的抽象接口。
- Usecase 层:业务逻辑处理层。
- Delivery 层:负责处理输入输出,通常是用户接口层。
项目的结构设计还可以通过作者的相关博客来了解,尽管结构可能有所变化,但应用层的基本概念保持不变。
项目运行方式
为了运行此项目,请确保已经在 MySQL 中运行了 article.sql
。建议将源码放在任意文件夹而不是 GOPATH 中,因为项目已经使用了 Go Module 管理。
测试运行
可以通过以下命令运行测试:
$ make tests
应用程序运行
以下是使用 docker-compose
运行的步骤:
-
移动到工作目录
$ cd workspace
-
克隆项目到工作空间
$ git clone https://github.com/bxcodec/go-clean-arch.git
-
进入项目目录
$ cd go-clean-arch
-
复制环境变量示例文件
$ cp example.env .env
-
运行应用程序
$ make up
-
应用程序开始热重载运行
-
在另一个终端执行调用请求
$ curl localhost:9090/articles
使用的工具
项目中使用了一些工具,例如:
- 列在
go.mod
文件中的所有库。 github.com/vektra/mockery
用于生成测试所需的模拟工具。
可以根据项目需求选择合适的类库,只需确保选择能够满足相同需求的更合适的库,并充分发挥创造力。