goweb3系列解析19:goDomain 目录解析domain
2026/6/8 3:13:42 网站建设 项目流程

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.go,t_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页面相关业务

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询