goweb3项目的domain目录是业务领域层,采用分层架构设计,包含核心组件和功能模块。目录结构清晰划分了初始化入口、API工具、Web控制器基类、服务基类、数据库和ES领域等模块。核心组件包括初始化入口(Init.go)、基础控制器(BaseController)、基础服务(BaseService)等,提供参数解析、请求验证、缓存管理、日期处理等通用能力。数据库领域包含实体层、DAO层、DTO层和门面层;ES领域实现索引管理和搜索服务。架构采用Controller→Service→DAO→Entity分层模式,支持多数据源和自动迁移。设计特点包括分层架构、基类封装、依赖注入和缓存支持,为业务开发提供标准化框架和基础能力。

Domain 目录解析

domain 目录是 goweb3 项目的业务领域层,包含业务逻辑、数据访问、Web 控制器等核心组件,采用分层架构设计。


一、目录结构


plainText

domain/
├── Init.go                    # 领域层初始化入口
├── apiutils/                  # API工具函数
│   └── apiutils.go
├── apiconsts/                 # API常量定义
│   └── apiconsts.go
├── apifacade/                 # API门面(对外统一入口)
│   └── 1.go
├── baseweb/                   # Web基础组件
│   ├── BaseController.go      # 控制器基类
│   ├── BaseWeb.go             # Web基础类
│   └── base_controller_init.go
├── baseservice/               # 服务基础组件
│   └── BaseService.go         # 服务基类
├── db/                        # 数据库领域
│   ├── InitDb.go              # 数据库初始化
│   ├── dbentity/              # 数据库实体
│   │   ├── learnentity/       # 学习实体
│   │   ├── sys_menu.go
│   │   ├── t_sys_user.go
│   │   └── ...
│   ├── dbdao/                 # 数据访问对象
│   │   ├── users_dao.go
│   │   ├── t_sys_user_dao.go
│   │   └── ...
│   ├── dbdto/                 # 数据传输对象
│   │   ├── ui_student.go
│   │   ├── TrialReservation.go
│   │   └── ...
│   ├── dbfacade/              # 数据库门面
│   │   ├── userfacade.go
│   │   └── ...
│   ├── dbiface/               # 数据库接口
│   │   └── migrate.go
│   └── uipage/                # UI分页查询
│       ├── user_request.go
│       ├── uiquery_student.go
│       └── ...
├── es/                        # Elasticsearch领域
│   ├── InitEs.go              # ES初始化
│   ├── esentity/              # ES实体
│   │   ├── service_website.go
│   │   ├── sys_dept_es.go
│   │   └── ...
│   └── esservice/             # ES服务
│       ├── service_perform_month_es.go
│       └── ...
├── internal/                  # 内部模块
│   ├── db/                    # 内部数据库模块
│   │   ├── web/               # Web控制器
│   │   ├── gorpc/             # gRPC服务
│   │   └── test/              # 测试用例
│   └── es/                    # 内部ES模块
│       └── basedao/           # ES基础DAO
└── pageui/                    # UI页面模块
    ├── ui dto/                # UI数据传输对象
    ├── uirequest/             # UI请求定义
    ├── uiexample/             # UI示例
    ├── uiclickhouse/          # ClickHouse UI查询
    └── ...

二、核心组件解析

1. 初始化入口

domain/Init.go - 领域层统一初始化


go

func Init() error {
    golog.Info("init db & es")
    
    // 初始化数据库
    var err = db.InitDb()
    if err != nil {
        return err
    }
    
    // 初始化Elasticsearch
    return es.InitEs().Result2Error()
}

db/InitDb.go - 数据库初始化


go

func InitDb() error {
    golog.Info("init db")
    ichubconfig.FindBeanIchubConfig().CheckSoftwareEnv()
    initCommon()
    return dbiface.AutoMigrate()
}

es/InitEs.go - ES初始化


go

func InitEs() *basedto.IchubResult {
    var ret = esentity.NewWebFacadeServiceWebsite().CreateIndexIfNotExist()
    if ret != nil {
        return ret
    }
    es.NewWebFacadeServicePerformMonthEs().CreateIndexIfNotExist()
    return esservice.NewWebFacadeServicePerformMonthEs().CreateIndexesIfNotExist()
}

2. 基础控制器层

baseweb/BaseController.go - Web控制器基类


go

type BaseController struct {
    basedto.BaseEntitySingle
    BaseWeb
}

// 参数获取方法
func (self *BaseController) GetParam2Int64(c *gin.Context, key string) int64
func (self *BaseController) GetParam2Str(c *gin.Context, key string) string
func (self *BaseController) GetQuery2Int64(c *gin.Context, key string) int64
func (self *BaseController) GetQuery2Bool(c *gin.Context, key string) bool

baseweb/BaseWeb.go - Web基础类


go

type BaseWeb struct {
    baseservice.BaseService
}

职责

  • 参数解析(URL参数、Query参数)
  • 请求验证
  • 响应封装
  • 继承 BaseService 获得业务能力

3. 基础服务层

baseservice/BaseService.go - 服务基类


go

type BaseService struct {}

// 请求解析
func (self *BaseService) ParseBody(ctx *gin.Context, req any) error
func (self *BaseService) ParseBodyOnly(ctx *gin.Context, dto any) error

// 缓存操作
func (self *BaseService) GetCache(key string) (any, bool)
func (self *BaseService) SetCache(key string, v any)
func (self *BaseService) SetCache5M(key string, v any)
func (self *BaseService) SetCache2Hour(key string, v any)

// 日期处理
func (self *BaseService) TimeBetween2DateOnly(start, end time.Time) (time.Time, time.Time)
func (self *BaseService) TimeMonthFirstLastDay(day time.Time) (time.Time, time.Time)
func (self *BaseService) Datetime2DateStrTodayYesterday(day time.Time) (start, end string)

// 响应处理
func (self *BaseService) ResFailUserMsg(c *gin.Context, msg string)
func (self *BaseService) ResFailSystemMsg(c *gin.Context, msg string)

// SQL执行
func (self *BaseService) ExecSql(sql string, params ...any) error

职责

  • 请求体解析(JSON -> Struct)
  • Redis缓存管理
  • 日期时间处理工具
  • 通用响应封装
  • 数据库原生SQL执行

4. 数据库领域
4.1 实体层 (dbentity)
文件 说明
sys_menu.go 系统菜单实体
t_sys_user.go 系统用户实体
train_group_rest.go 培训组休息实体
learnentity/users.go 学习用户实体
4.2 DAO层 (dbdao)
文件 说明
users_dao.go 用户数据访问
t_sys_user_dao.go 系统用户DAO
train_group_rest_dao.go 培训组DAO
4.3 DTO层 (dbdto)
文件 说明
ui_student.go 学生UI请求DTO
TrialReservation.go 试用预约DTO
TrialTrain.go 试用培训DTO
4.4 门面层 (dbfacade)

go

// userfacade.go - 用户业务门面
type UserFacade struct {
    // 聚合用户相关业务
}
4.5 UI分页查询 (uipage)

go

// uiquery_student.go - 学生分页查询
type UiQueryStudent struct {
    *pagedao.PageDao[int64, *Student]
}

5. Elasticsearch领域
5.1 ES实体 (esentity)
文件 说明
service_website.go 网站服务ES实体
sys_dept_es.go 系统部门ES实体
service_domain_es.go 域名服务ES实体
es_contact_person.go 联系人ES实体
5.2 ES服务 (esservice)
文件 说明
service_perform_month_es.go 月度绩效ES服务
example_service.go 示例服务

6. 内部模块 (internal)

plainText

internal/
├── db/
│   ├── web/                  # Web控制器
│   │   ├── service_api_list_web.go
│   │   └── coo_permission_web.go
│   ├── gorpc/                # gRPC服务
│   │   ├── proto/            # 协议定义
│   │   └── service/          # RPC服务实现
│   └── test/                 # 测试用例
│       ├── dao/              # DAO测试
│       └── service/          # 服务测试
└── es/
    ├── basedao/              # ES基础DAO
    └── esmodel/              # ES模型

7. UI页面模块 (pageui)
子目录 说明
uidto/ UI数据传输对象
uirequest/ UI请求定义
uiexample/ UI示例代码
uiclickhouse/ ClickHouse查询UI

三、架构关系图

plainText

┌─────────────────────────────────────────────────────────────────┐
│                        Domain 领域层                           │
├─────────────────────────────────────────────────────────────────┤
│                                                               │
│  ┌──────────────┐     ┌──────────────┐     ┌──────────────┐   │
│  │   baseweb    │     │ baseservice  │     │  apiconsts   │   │
│  │ (控制器基类) │     │  (服务基类)  │     │  (API常量)   │   │
│  └──────┬───────┘     └──────┬───────┘     └──────────────┘   │
│         │                    │                                 │
│         ▼                    ▼                                 │
│  ┌─────────────────────────────────────┐                      │
│  │              业务服务层              │                      │
│  │  db/dbdao  │  es/esservice  │ api   │                      │
│  └─────────────────────────────────────┘                      │
│         │                    │                                 │
│         ▼                    ▼                                 │
│  ┌──────────────┐     ┌──────────────┐                        │
│  │   dbentity   │     │   esentity   │                        │
│  │ (数据库实体) │     │  (ES实体)   │                        │
│  └──────────────┘     └──────────────┘                        │
│                                                               │
└─────────────────────────────────────────────────────────────────┘

四、分层职责

层级 职责 核心文件
Controller 处理HTTP请求,参数校验,响应封装 BaseController.go
Service 业务逻辑处理,事务管理,数据转换 BaseService.go
DAO 数据库访问,CRUD操作 users_dao.go
Entity 数据实体定义,映射数据库表 sys_menu.got_sys_user.go
DTO 数据传输对象,请求/响应结构 ui_student.go
Facade 业务门面,聚合多个服务 userfacade.go
UIQuery 分页查询封装 uiquery_student.go

五、初始化流程


plainText

main.go
    ↓
domain.Init()
    ↓
├── db.InitDb()
│       ↓
│   ├── CheckSoftwareEnv()          # 检查环境配置
│   ├── initCommon()                # 初始化公共实体
│   └── dbiface.AutoMigrate()       # 自动迁移数据库表
│
└── es.InitEs()
        ↓
    ├── CreateIndexIfNotExist()     # 创建ES索引(如不存在)
    └── CreateIndexesIfNotExist()   # 批量创建索引

六、使用示例

1. 创建自定义控制器

go

type UserController struct {
    baseweb.BaseController
}

func NewUserController() *UserController {
    return &UserController{}
}

func (self *UserController) RegisterRoute(api *gin.RouterGroup) {
    api.GET("/users/:id", self.GetUser)
    api.POST("/users", self.CreateUser)
}

func (self *UserController) GetUser(c *gin.Context) {
    userId := self.GetParam2Int64Check(c, "id")
    user := self.GetUserById(userId)
    c.JSON(200, user)
}
2. 创建自定义服务

go

type UserService struct {
    baseservice.BaseService
}

func NewUserService() *UserService {
    return &UserService{}
}

func (self *UserService) GetUserById(userId int64) *User {
    // 业务逻辑处理
    cacheKey := fmt.Sprintf("user:%d", userId)
    if user, exist := self.GetCache(cacheKey); exist {
        return user.(*User)
    }
    
    // 查询数据库
    user := self.queryUser(userId)
    
    // 缓存结果
    self.SetCache(cacheKey, user)
    return user
}

七、设计特点

特点 说明
分层架构 Controller → Service → DAO → Entity
基类封装 提供通用能力,减少重复代码
依赖注入 通过 FindBeanXxx() 获取组件实例
自动迁移 数据库表结构自动同步
多数据源 支持MySQL、PostgreSQL、ClickHouse
ES集成 完整的Elasticsearch操作封装
缓存支持 内置Redis缓存管理

八、目录职责总结

目录 职责 状态
baseweb/ Web控制器基础能力 核心
baseservice/ 服务层基础能力 核心
db/dbentity/ 数据库实体定义 业务
db/dbdao/ 数据访问对象 业务
db/dbdto/ 数据传输对象 业务
db/dbfacade/ 业务门面聚合 业务
db/uipage/ UI分页查询 业务
es/esentity/ ES实体定义 业务
es/esservice/ ES服务层 业务
internal/ 内部模块(不对外暴露) 内部
pageui/ UI页面相关 业务

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐