kra-oa/docs/system-pkg-audit.md

71 lines
3.7 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.

# `` 到 `pkg` 复用性审查
审查原则:公共包只提供跨模块稳定的机制、协议或无状态纯函数;不能依赖
`app/*/internal`,也不承载 system 的业务表、用例、provider 客户端或运行时
配置。
## 已抽取到 `pkg`
| 能力 | 公共位置 | 说明 |
| --- | --- | --- |
| HTTP JSON 响应契约 | `pkg/httpx` | `Response`、`PageResult`、状态码和 Gin 响应助手;`server/httpx/response.go` 仅保留 system 适配。 |
| protobuf JSON 局部合并 | `pkg/protoutil` | 与业务无关的字段归一化和局部反序列化;初始化直接使用公共包。 |
| 支付 provider/mode 标识 | `pkg/paymentkit` | provider 常量、支持列表、金额/签名/JSON 等跨模块协议system `biz` 只保留兼容别名。 |
| 支付回调 ACK | `pkg/paymentkit` | 回调应答、失败包装和默认 provider 应答;具体渠道 SDK 仍留在 system integration。 |
| WebSocket 通用收发 | `pkg/websocket` | Melody 的连接、事件、点对点发送、广播和会话查询封装system integration 管理配置与生命周期。 |
| 消息队列 | `pkg/mq` | Broker 无关的发布、订阅、JSON 和 QoS 接口EMQX/Paho 与 RabbitMQ/AMQP 客户端由 system integration 管理。 |
| 模块、任务和迁移协议 | `pkg/module`、`pkg/task`、`pkg/database/migration` | 供不同业务模块注册贡献,不带 system 业务语义。 |
## system 内部保留边界
- `app`:组合根,绑定 system 的迁移、菜单、路由和任务贡献。
- `biz`:用户、权限、菜单、审计、任务、支付订单和系统配置等领域模型与用例。
- `conf`system 配置 proto、运行时快照和生成代码。
- `data`数据库连接、PO、仓储、system 表、支付持久化和配置 watcher。
- `initialize`:首次安装、配置迁移、种子编排和运行时重载。
- `integration`Redis、邮件、存储、支付、WebSocket、EMQX 和 RabbitMQ 的 provider 生命周期。
- `security`JWT claims、签发/解析和后台安全实现。
- `service`HTTP DTO`service/dto`、DTO 与 DO 转换、应用服务和路由元数据。
- `server`Gin 生命周期handler、middleware、router、HTTP 适配按子包维护。
- `worker`任务调度、执行器、SSE 订阅及其并发状态。
这些代码都带有 system 的 API、配置、数据表或生命周期语义不应为了减少
文件数量搬到 `pkg`
## 目录分类约定
```text
internal/
app/ # 组合根和模块定义
biz/ # DO、usecase、repo interface
conf/ # 配置 proto/runtime
data/ # PO、repo、数据库和迁移
initialize/ # 首次安装和配置编排
integration/ # 外部 I/O provider
security/ # JWT 和安全实现
server/ # Gin 生命周期,内部按 handler/middleware/router/httpx 分类
service/ # 应用服务DTO 集中在 dto 子包
worker/ # 任务运行时
```
技术角色使用子目录表达,子目录内部使用资源名,例如 `handler/payment.go`
`router/payment.go`、`dto/payment.go`。只有少量代码且没有独立边界时不建立
新包;同一角色文件较多时也不应全部堆在父目录。
## 暂不抽取的候选
1. token cookie 名称、SameSite 和反向代理策略:目前是 system 认证策略。
2. operation-audit 脱敏和请求采集:包含 system context key 与审计字段。
3. biz 查询选项和错误:当前绑定 system 的领域接口及 API reason。
只有当其他模块出现相同、稳定且不带 system 语义的契约时,才新增公共包;不要
直接把单个 system 类型搬到 `pkg`
## 验证
```text
go test ./...
```
当前全仓测试通过,且未发现对已删除旧路径的 Go import。