Files
ssq-desk/docs/02-技术文档/模块化架构设计.md
2026-01-14 14:17:38 +08:00

162 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 模块化架构设计
## 1. 设计理念
采用模块化设计,各功能模块相互独立、松散耦合,便于维护和扩展。
### 1.1 模块独立性
- 每个功能模块ssq查询、授权码、版本更新独立实现
- 模块之间不直接依赖,通过模块管理器统一管理
- 模块可以独立开发、测试、部署
### 1.2 松耦合设计
- 模块通过接口定义,不依赖具体实现
- 模块管理器负责模块的注册、初始化、启动、停止
- App 层只依赖模块管理器,不直接依赖具体模块
## 2. 模块接口
### 2.1 Module 接口
```go
type Module interface {
Name() string // 模块名称
Init(ctx context.Context) error // 初始化
Start(ctx context.Context) error // 启动
Stop(ctx context.Context) error // 停止
GetAPI() interface{} // 获取 API 接口
}
```
### 2.2 BaseModule 基础实现
提供模块的基础实现,各模块可以继承并扩展。
## 3. 模块管理器
### 3.1 Manager 功能
- 模块注册:`Register(module Module)`
- 模块获取:`Get(name string)`
- 批量操作:`InitAll()`, `StartAll()`, `StopAll()`
- API 收集:`GetAPIs()`
### 3.2 使用方式
```go
manager := module.NewManager()
// 注册模块
ssqModule, _ := module.NewSsqModule()
manager.Register(ssqModule)
authModule, _ := module.NewAuthModule()
manager.Register(authModule)
// 初始化所有模块
manager.InitAll(ctx)
// 启动所有模块
manager.StartAll(ctx)
```
## 4. 功能模块
### 4.1 SSQ 查询模块
**模块名称**: `ssq`
**功能**: 双色球历史数据查询
**API**: `*api.SsqAPI`
**实现文件**: `internal/module/ssq_module.go`
### 4.2 授权码模块
**模块名称**: `auth`
**功能**: 设备授权码验证和激活
**API**: `*api.AuthAPI`
**实现文件**: `internal/module/auth_module.go`
**启动行为**: 自动检查授权状态
### 4.3 版本更新模块
**模块名称**: `update`
**功能**: 版本更新检查、下载、安装
**API**: 待实现
**实现文件**: `internal/module/update_module.go`
**状态**: 占位符,待实现
## 5. 目录结构
```
internal/
├─ module/ # 模块层
│ ├─ module.go # 模块接口定义
│ ├─ manager.go # 模块管理器
│ ├─ ssq_module.go # SSQ 查询模块
│ ├─ auth_module.go # 授权码模块
│ └─ update_module.go # 版本更新模块(待实现)
├─ api/ # API 层
│ ├─ ssq_api.go # SSQ API
│ └─ auth_api.go # Auth API
├─ service/ # 服务层
└─ storage/ # 存储层
```
## 6. 模块扩展
### 6.1 添加新模块
1. 实现 `Module` 接口
2. 创建模块文件(如 `xxx_module.go`
3.`NewApp()` 中注册模块
```go
xxxModule, _ := module.NewXxxModule()
manager.Register(xxxModule)
```
### 6.2 模块生命周期
```
注册 → 初始化 → 启动 → 运行 → 停止
```
- **注册**: 模块创建并注册到管理器
- **初始化**: 模块初始化资源(数据库、配置等)
- **启动**: 模块启动服务(检查授权、启动定时任务等)
- **运行**: 模块提供服务
- **停止**: 模块清理资源
## 7. 优势
### 7.1 可维护性
- 模块独立,修改不影响其他模块
- 清晰的模块边界和职责
### 7.2 可扩展性
- 新增功能只需添加新模块
- 模块可以独立开发和测试
### 7.3 可测试性
- 模块可以独立测试
- 便于 Mock 和单元测试
### 7.4 松耦合
- 模块之间不直接依赖
- 通过接口和管理器解耦
---
> 文档维护者JueChen
> 创建时间2026-01-07