thumbnail image prompt:background: A butterfly is on a flower in the warm sunlight ,frontend text: “HelloAdmin”

项目介绍

HelloAdmin 是一个基于 Gin + Ant Design Vue UI 的前后端分离管理系统,前端使用 Ant Design Vue UI,后端使用 Gin 框架。

go-clean-template 项目启发,如何组织Go项目,以防止项目演化成难以维护的代码,使用 Go 社区库,组织了该项目,借助 AI Coding,重新组织了项目工程结构可用于新项目组的 Go 脚手架工具。

工程架构

该项目使用四层架构,常规无论是 PHP 框架还是 Java,基本 MVC 三层思想已经深入我们的心中,但是 Go 项目如果像 PHP、Java 项目一样组织代码,开发过程中将是很痛苦的一件事,目录中跳来跳去,这让我觉得很麻烦。

于是在借鉴 go-clean-template 项目思想,我做了以下两个方向的主要改造:

  1. 按业务划分代码块,直白说就是,同一个业务的代码在一个目录下,以员工和部门为例,工程目录如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
├── internal
│   ├── department
│   │   ├── api_types.go
│   │   ├── handler.go
│   │   ├── model.go
│   │   ├── repository.go
│   │   └── service.go
│   ├── ecode
│   │   ├── errcode_string.go
│   │   └── error.go
│   └── user
│       ├── api_types.go
│       ├── handler.go
│       ├── model.go
│       ├── respository.go
│       └── service.go

各个业务模块的代码,归在各自的工程目录,这样做的唯一好处就是很好维护,那个业务模块出了问题,可以快速定位。

  1. 在 MVC 三层思想之上,增加 Service 层,每层业务对外以接口方式暴漏,符号 > 和 < 通过接口显示层边界的交集 如图所示
1
2
3
4
5
6
HTTP > handler
       handler > service > repository (repo)
       handler < service < repository (repo)
       handler > service > repository (repo)
       handler < service < repository (repo)
HTTP < handler
  • repository (repo) 保持着与数据库(database)最纯粹的 CURD

更多,见源码地址:https://github.com/heliosker/helloadmin