go-clean-arch
变更日志
-
v1:签出到 v1 分支
2017 年提出,2018 年归档到 v1 分支。
描述:由我提出的初步建议。故事可以在这里阅读: https://medium.com/@imantumorang/golang-clean-archithecture-efd6d7c43047 -
v2:签出到 v2 分支
2018 年提出,2020 年归档到 v2 分支。
描述:Improvement from v1. 故事可以在这里阅读:https://medium.com/@imantumorang/trying-clean-architecture-on-golang-2-44d615bf8fdf -
v3:主分支
2019 年提出,2020 年并入 master。
描述:介绍域名包,详情可查看此 PR #21。
说明
这是一个在 Go(Golang)项目中实现 Clean Architecture 的例子。
鲍勃大叔的清晰架构规则:
- 独立于框架。该架构不依赖于某些功能丰富的软件库的存在。这允许您将这些框架用作工具,而不是将您的系统塞进它们有限的限制中。
- 可测试性。业务规则可以在没有 UI、数据库、Web 服务器或任何其他外部元素的情况下进行测试。
- 独立于 UI。用户界面可以很容易地改变,而不需要改变系统的其他部分。例如,Web 用户界面可以被控制台用户界面所取代,而无需改变业务规则。
- 独立于数据库。你可以把 Oracle 或 SQL Server 换成 Mongo、BigTable、CouchDB 或其他的数据库。你的业务规则不受数据库的约束。
- 独立于任何外部机构。事实上,你的业务规则根本不知道外界的任何情况。
更多内容请访问 https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
本项目有 4 个领域层:
- Models Layer(模型层)
- Repository Layer(存储库层)
- Usecase Layer(用例层)
- Delivery Layer(传送层)
如下图所示:
关于这个项目结构的原始解释,可以从这个 medium 帖子中读到:https://medium.com/@imantumorang/golang-clean-archithecture-efd6d7c43047。
可能已经不同了,但在应用层面的概念还是一样的,也可以在 Master 中看到从 v1 到当前版本的变更日志。
如何运行这个项目
确保你已经在你的 mysql 中运行了 article.sql。
由于该项目已经使用了 Go 模块,所以我建议将源代码放在 GOPATH 以外的任何文件夹中。
运行测试
$ make test
运行应用
以下是使用 docker-compose 运行的步骤:
#move to directory $ cd workspace # Clone into YOUR $GOPATH/src $ git clone https://github.com/bxcodec/go-clean-arch.git #move to project $ cd go-clean-arch # Build the docker image first $ make docker # Run the application $ make run # check if the containers are running $ docker ps # Execute the call $ curl localhost:9090/articles # Stop $ make stop
使用的工具
在这个项目中,我使用了下面列出的一些工具。但是你也可以使用任何具有相同用途的类似库。但是,不同的库会有不同的实现类型。你可以发挥你的创造力,使用任何你真正需要的工具。
- 所有在
go.mod
中列出的库 - "github.com/vektra/mockery".。为测试需要生成 Mocks。
(First version translated and edited by vz on 2020.12.19)