beapi 目录架构审核
一、整体架构概览
beapi 是项目的核心业务逻辑层,采用经典的分层架构设计,职责清晰、模块划分合理。
plainText
beapi/ ├── baseframe/ # 基础框架 ├── beconfig/ # 配置管理 ├── cmd/ # CLI 命令行工具 ├── common/ # 通用组件 ├── config/ # 配置文件 ├── cronjob/ # 定时任务 ├── ctxt/ # 请求上下文管理 ├── database/ # 数据库连接层 ├── db/ # 领域模型与 DAO ├── trainframe/ # 训练业务框架(核心) │ ├── authentication/ # 认证模块 │ ├── authorization/ # 授权模块 │ ├── middleware/ # 中间件 │ ├── model/ # 实体模型 │ ├── repository/ # 仓储层 │ ├── service/ # 业务服务层 │ └── traindomain/ # 领域业务 └── gotool/ # 工具库二、分层架构设计
| 层级 | 目录 | 职责 |
|---|---|---|
| 基础设施层 | database/,baseframe/ | 数据库连接、基础框架 |
| 数据访问层 | db/dbdao/,trainframe/repository/ | DAO、仓储模式 |
| 领域模型层 | db/apitype/,trainframe/model/ | 实体、值对象、类型定义 |
| 业务逻辑层 | trainframe/service/,trainframe/traindomain/ | 业务服务、领域业务 |
| 控制层 | beweb/webctl/(在 beweb 中) | REST API 控制器 |
| 工具层 | gotool/ | 通用工具、报表、批处理 |
三、核心模块详解
1. trainframe/ - 训练业务框架(核心)
1.1 authentication/ - 认证模块
| 文件 | 职责 |
|---|---|
jwt.go | JWT 令牌服务 |
oauth/ | OAuth 第三方登录(GitHub、微信) |
1.2 authorization/ - 授权模块
| 文件 | 职责 |
|---|---|
authorization.go | 权限认证服务 |
auth_service.go | RBAC 权限服务 |
1.3 middleware/ - 中间件层
| 中间件 | 职责 |
|---|---|
authentication.go | JWT 认证 |
authorization.go | 权限校验 |
cors.go | 跨域处理 |
error.go | 统一错误处理 |
log.go | 请求日志 |
ratelimit.go | 限流 |
trace.go | 链路追踪 |
1.4 model/ - 实体模型
| 子模块 | 职责 |
|---|---|
entityuser/ | 用户实体(User、Student、LoginInfo) |
entitytrain/ | 训练实体(TrainPlan、TrainResult) |
entityword/ | 词汇实体(Word、Sentence、Vocab) |
entityrtc/ | RTC 实体(会议、录制) |
entitypay/ | 支付实体 |
1.5 repository/ - 仓储层
| 子模块 | 职责 |
|---|---|
reposuser/ | 用户仓储 |
repostrain/ | 训练仓储 |
reposword/ | 词汇仓储 |
reposrtc/ | RTC 仓储 |
reposfacade/ | 仓储门面(统一入口) |
1.6 service/ - 业务服务层
| 子模块 | 职责 | 文件数 |
|---|---|---|
serviceuser/ | 用户服务 | 12 |
servicetrain/ | 训练服务 | 10 |
serviceword/ | 词汇服务 | 8 |
servicertc/ | RTC 服务 | 6 |
servicebase/ | 基础服务(OSS、SMS、实人认证) | 6 |
servicepay/ | 支付服务 | 2 |
servicews/ | WebSocket 服务 | 1 |
1.7 traindomain/ - 领域业务
| 子模块 | 职责 |
|---|---|
credits/ | 研值领域(核心业务) |
consumer/ | 消息队列消费 |
domainbiz/ | 业务领域 |
domainplat/ | 平台领域 |
credits 研值领域结构:
plainText
credits/ ├── creditfacade/ # 研值门面(策略模式) ├── creditsentity/ # 研值实体 ├── creditserv/ # 研值服务 ├── creditsiface/ # 研值接口定义 ├── creditsrepo/ # 研值仓储 └── creditsvo/ # 研值 VO2. gotool/ - 工具库
| 子模块 | 职责 |
|---|---|
dbframe/ | 数据库框架(数据权限、分页、审计) |
gobatch/ | 批处理框架 |
goreport/ | 报表生成框架 |
goutil/ | 通用工具(ID生成、字符串处理) |
excel2html/ | Excel 转 HTML |
3. db/ - 数据层
| 子模块 | 职责 |
|---|---|
dbdao/ | 数据访问对象 |
apitype/ | API 类型定义 |
apimodel/ | API 模型 |
apiconst/ | API 常量 |
四、设计模式应用
1. 仓储模式 (Repository Pattern)
plainText
repository/ ├── reposuser/user_repository.go # 用户仓储 ├── repostrain/train_plan_repository.go # 训练计划仓储 └── reposfacade/interface.go # 仓储接口2. 门面模式 (Facade Pattern)
reposfacade/- 仓储门面servicefacade/- 服务门面creditfacade/- 研值门面
3. 策略模式 (Strategy Pattern)
plainText
credits/creditfacade/coststrategy/ ├── opc_strategy.go # OPC 消费策略 └── plat_strategy.go # 平台消费策略4. 依赖注入 (Dependency Injection)
所有组件遵循统一的初始化模式:
go
// xxx_init.go - 依赖注入注册 func init() { ichubconfig.RegisterBean(...) }五、架构优点
1. 职责清晰
- 分层明确,各层职责单一
- 模块划分遵循单一职责原则
2. 扩展性强
- 基于接口编程,便于替换实现
- 策略模式支持业务规则扩展
3. 代码规范
- 统一的命名规范(
xxx_service.go+xxx_service_init.go) - 统一的依赖注入模式
4. 可测试性
- 仓储层与业务层分离,便于单元测试
- 接口定义清晰,支持 Mock
5. 领域驱动设计
traindomain/实现领域业务- 研值领域设计完整(实体、服务、仓储、门面)
六、待优化点
1. 模块命名不一致
beconfig/vsconfig/- 配置目录重复ctxt/命名不够直观,建议改为context/
2. 测试覆盖率
- 测试文件较少,建议补充单元测试
- 关键业务流程(如研值消费)需要集成测试
3. 依赖注入配置分散
config/godi/di_define.ini集中配置,但代码中仍有多处初始化逻辑
4. 文档完善
- 核心业务流程缺少架构文档
- 关键算法(如 FSRS)缺少注释说明
5. 代码重复
db/apitype/与gotool/dbframe/dbapitype/存在重复类型定义
七、模块依赖关系
plainText
┌─────────────────────────────────────────────────────────┐ │ HTTP Controller (beweb) │ └──────────────────────┬──────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ trainframe/service/ (业务服务层) │ └──────────────────────┬──────────────────────────────────┘ │ ┌─────────────┼─────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ repository/ │ │ traindomain/│ │ model/ │ │ (仓储层) │ │ (领域业务) │ │ (实体模型) │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ └───────────────┼───────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ database/ (数据连接层) │ └─────────────────────────────────────────────────────────┘八、总结
beapi 架构设计整体良好,采用经典的分层架构和多种设计模式,职责清晰、扩展性强。主要待优化点集中在:
- 模块命名一致性
- 测试覆盖率提升
- 文档完善
建议持续推进代码规范和架构演进,保持良好的可维护性。