将所有 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>
4.8 KiB
4.8 KiB
提案:将 IoT 模型迁移到统一的 internal/model/ 目录
动机 (Motivation)
当前 IoT 模块的数据模型被放置在 internal/iot/model/ 目录下,这与项目的其他模型(如 Shop、Account、Enterprise 等)不一致。其他模型都统一放在 internal/model/ 目录下。
存在的问题:
- 目录结构不一致:IoT 模型使用
internal/iot/model/,而其他模型使用internal/model/,导致项目结构混乱 - 导入路径冗余:引用 IoT 模型时需要写
internal/iot/model,而其他模型只需要internal/model - 违反项目约定:根据
openspec/project.md的架构规范,所有模型应该统一在 Model 层管理 - 可维护性下降:新开发者容易困惑,不知道应该把模型放在哪里
当前 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/,与项目的其他模型保持一致。
迁移方案:
- 将
internal/iot/model/目录下的所有.go文件移动到internal/model/ - 所有文件的包名保持为
package model(无需修改) - 删除空的
internal/iot/model/目录 - 检查是否有其他代码引用了
internal/iot/model,如果有则更新导入路径(当前搜索未发现引用) - 验证所有模型文件的包名一致性,确保都是
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)
- 移动文件:将 11 个模型文件从
internal/iot/model/移动到internal/model/ - 删除空目录:删除
internal/iot/model/目录 - 验证包名:确认所有模型文件的包名都是
package model - 搜索引用:再次搜索项目中是否有
internal/iot/model的引用,如有则更新 - 运行测试:执行
go test ./...确保没有破坏性变更 - 构建验证:执行
go build确保项目可以正常编译
验收标准 (Acceptance Criteria)
- 所有 IoT 模型文件已迁移到
internal/model/目录 internal/iot/model/目录已删除- 项目可以正常编译(
go build成功) - 所有测试通过(如果存在测试)
- 项目中不存在
internal/iot/model的引用(已更新文档中的引用)
参考资料 (References)
- 项目架构规范:
openspec/project.md - 现有模型目录:
internal/model/ - IoT 相关规格:
openspec/specs/iot-card/spec.md