Skip to content
Clean Architecture的Go结构 这不是一个框架 只是结构的实现
Go Dockerfile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
deliveries
models
repositories
usecases
utils
.gitignore
Dockerfile
LICENSE
README.md
config.yaml.example
docker-compose.yml
go.mod
main.go

README.md

Togo

这是一个基于Clean-Architecture的Go框架实现,Clean Architecture是Robert C. Martin提出的一种业务领域分层的方法论,文章参考https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html

目录

框架结构

  1. models实体层

实体层的数据是系统数据类型的抽象,是内部的关键业务逻辑结构,最不可能发生变化的部分。在项目中,该层的结构可能被用作参数的类型,进行传递。

  1. repositories存储层

存储层一般用来进行CRUD操作,通常DB连接句柄或者ORM在此处使用。此处没有业务流程而是专注于数据的操作(DB,RPC,FS),这里没有业务流程,只有普通的数据操作功能。

repo层定义了DB的操作接口,实现repo层与上层的隔离

  1. usecases用例层

用例层时业务流程的处理程序,相当于MVC中的Controller控制器,该层通过业务流程决定使用哪个存储库层,并提供数据。

usecases层定义了业务的操作接口,实现与上层的隔离。它会接收来自调用者的请求,通过逻辑处理,返回处理后的数据(usecases不考虑是谁调用了它,只需要返回数据即可)。

  1. deliveries交付层

决定数据如何呈现。这一层将接收来自用户的输入, 并清理数据然后传递给接口适配层。

在程序中,我将路由router和请求处理handle放在此处,router专门负责路由的定义,handle专门负责usecase业务逻辑的调用与数据交付(以REST API的方式)。

  1. utils包

某些功能可能抽离成单独的函数方法比较合适(比如配置信息的读取),utils包正在做这些事情,它隔离于框架,为程序运行时提供额外的组态。

project                  应用部署目录
├─deliveries             交付层
│  ├─handler             路由请求处理目录
│  ├─router              路由配置目录
│  └─run.go              启动器
├─usecases               实例层
├─repositories           仓库存储层
├─models                 实体层
├─utils                  常用工具
├─main.go                程序启动入口
├─config.yaml.example    配置样例文件
├─LICENSE                授权说明文件
├─README.md              README 文件

应用流程

APP.png

依赖

  1. repositories层:gorm

    gorm: The fantastic ORM library for Golang

  2. deliveries层:gin

    gin: A HTTP web framework written in Go

使用说明

真机运行:

//拷贝 config.yaml.example 为 config.yaml
//修改 config.yaml 的 mysql_dsn 数据库配置项
//运行
go run main.go

Dockerfile:

//先启用mysql,此处使用docker方式运行
docker run --name mysql_togo -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
//修改 config.yaml.example 为 config.yaml
//修改 config 的 mysql_dsn

//构建镜像
docker build -t togo/togo:v1 .
//运行容器 PATH为项目目录 expose_port为本机曝露(转发)端口
docker run -d -v PATH:/Project -p expose_port:5000 --name togo_app togo/togo:v1

Docker-compose:

//构建
docker-compose build --no-cache
//启动
docker-compose start
//注意:请修改 config.yaml 的 mysql_dsn HOST为 "mysql_c" 字符串

访问: host:5000

分层测试

自测。

参考

  1. The Clean Architecture https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html

  2. Clean Architecture Example (Java) https://github.com/mattia-battiston/clean-architecture-example

  3. go-arch-clean https://github.com/bxcodec/go-clean-arch

  4. Trying Clean Architecture on Golang https://hackernoon.com/golang-clean-archithecture-efd6d7c43047

License

© xuthus, 2019~time.Now

This software is licensed under the MIT License

You can’t perform that action at this time.