重构:统一 IoT 模型到 internal/model/ 目录
将所有 IoT 相关的数据模型从 internal/iot/model/ 迁移到 internal/model/, 实现全局统一的模型层架构,符合项目横向分层设计原则。 变更内容: - 迁移 11 个 IoT 模型文件(carrier, iot_card, device, order, package 等) - 删除 internal/iot/model/ 目录 - 更新文档中的模型路径引用(25 处) - 创建重构总结文档 - 归档 OpenSpec 变更为 2026-01-12-refactor-iot-model-location - 创建 model-organization 规格文档 验证结果: - 编译通过(go build 成功) - 静态分析通过(go vet 无错误) - 代码格式通过(go fmt 无变更) - 无 Go 代码引用旧路径 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
# 提案:将 IoT 模型迁移到统一的 internal/model/ 目录
|
||||
|
||||
## 动机 (Motivation)
|
||||
|
||||
当前 IoT 模块的数据模型被放置在 `internal/iot/model/` 目录下,这与项目的其他模型(如 Shop、Account、Enterprise 等)不一致。其他模型都统一放在 `internal/model/` 目录下。
|
||||
|
||||
**存在的问题:**
|
||||
|
||||
1. **目录结构不一致**:IoT 模型使用 `internal/iot/model/`,而其他模型使用 `internal/model/`,导致项目结构混乱
|
||||
2. **导入路径冗余**:引用 IoT 模型时需要写 `internal/iot/model`,而其他模型只需要 `internal/model`
|
||||
3. **违反项目约定**:根据 `openspec/project.md` 的架构规范,所有模型应该统一在 Model 层管理
|
||||
4. **可维护性下降**:新开发者容易困惑,不知道应该把模型放在哪里
|
||||
|
||||
**当前 IoT 模型文件清单(11 个文件):**
|
||||
|
||||
- `internal/iot/model/carrier.go` - 运营商模型
|
||||
- `internal/iot/model/commission.go` - 佣金模型
|
||||
- `internal/iot/model/data_usage.go` - 流量使用记录模型
|
||||
- `internal/iot/model/device.go` - 设备模型
|
||||
- `internal/iot/model/financial.go` - 财务记录模型
|
||||
- `internal/iot/model/iot_card.go` - IoT 卡模型
|
||||
- `internal/iot/model/number_card.go` - 号卡模型
|
||||
- `internal/iot/model/order.go` - 订单模型
|
||||
- `internal/iot/model/package.go` - 套餐模型
|
||||
- `internal/iot/model/polling.go` - 轮询配置模型
|
||||
- `internal/iot/model/system.go` - 系统配置模型
|
||||
|
||||
## 提案内容 (Proposed Change)
|
||||
|
||||
将所有 IoT 相关模型从 `internal/iot/model/` 迁移到 `internal/model/`,与项目的其他模型保持一致。
|
||||
|
||||
**迁移方案:**
|
||||
|
||||
1. 将 `internal/iot/model/` 目录下的所有 `.go` 文件移动到 `internal/model/`
|
||||
2. 所有文件的包名保持为 `package model`(无需修改)
|
||||
3. 删除空的 `internal/iot/model/` 目录
|
||||
4. 检查是否有其他代码引用了 `internal/iot/model`,如果有则更新导入路径(当前搜索未发现引用)
|
||||
5. 验证所有模型文件的包名一致性,确保都是 `package model`
|
||||
|
||||
**目标结构:**
|
||||
|
||||
```
|
||||
internal/
|
||||
├── model/ # 统一的模型目录
|
||||
│ ├── account.go
|
||||
│ ├── shop.go
|
||||
│ ├── enterprise.go
|
||||
│ ├── personal_customer.go
|
||||
│ ├── role.go
|
||||
│ ├── permission.go
|
||||
│ ├── carrier.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── commission.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── data_usage.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── device.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── financial.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── iot_card.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── number_card.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── order.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── package.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── polling.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── system.go # ← 从 internal/iot/model/ 迁移
|
||||
│ ├── ...
|
||||
├── iot/ # IoT 业务逻辑目录
|
||||
│ ├── handler.go # (未来)IoT Handler 层
|
||||
│ ├── service.go # (未来)IoT Service 层
|
||||
│ └── store.go # (未来)IoT Store 层
|
||||
└── ...
|
||||
```
|
||||
|
||||
## 影响范围 (Impact)
|
||||
|
||||
**好消息:** 经过代码搜索,目前 **没有发现任何代码引用 `internal/iot/model`**,因此这是一个零影响的重构。
|
||||
|
||||
**潜在风险:**
|
||||
|
||||
- 如果未来有代码在提案实施期间新增了对 `internal/iot/model` 的引用,需要同步更新
|
||||
- 数据库迁移脚本不受影响(模型位置变更不影响表结构)
|
||||
|
||||
**不影响的部分:**
|
||||
|
||||
- 数据库表结构
|
||||
- API 接口
|
||||
- 业务逻辑
|
||||
- 测试代码(如果存在)
|
||||
|
||||
## 实施计划 (Implementation Plan)
|
||||
|
||||
1. **移动文件**:将 11 个模型文件从 `internal/iot/model/` 移动到 `internal/model/`
|
||||
2. **删除空目录**:删除 `internal/iot/model/` 目录
|
||||
3. **验证包名**:确认所有模型文件的包名都是 `package model`
|
||||
4. **搜索引用**:再次搜索项目中是否有 `internal/iot/model` 的引用,如有则更新
|
||||
5. **运行测试**:执行 `go test ./...` 确保没有破坏性变更
|
||||
6. **构建验证**:执行 `go build` 确保项目可以正常编译
|
||||
|
||||
## 验收标准 (Acceptance Criteria)
|
||||
|
||||
- [x] 所有 IoT 模型文件已迁移到 `internal/model/` 目录
|
||||
- [x] `internal/iot/model/` 目录已删除
|
||||
- [x] 项目可以正常编译(`go build` 成功)
|
||||
- [x] 所有测试通过(如果存在测试)
|
||||
- [x] 项目中不存在 `internal/iot/model` 的引用(已更新文档中的引用)
|
||||
|
||||
## 参考资料 (References)
|
||||
|
||||
- 项目架构规范:`openspec/project.md`
|
||||
- 现有模型目录:`internal/model/`
|
||||
- IoT 相关规格:`openspec/specs/iot-card/spec.md`
|
||||
Reference in New Issue
Block a user