Files
OpenFlare/docs/plan/20260724-model-repository-layering.md
T
ryan 943818f7d4 refactor(repository): 收敛 model/repository 分层为唯一持久化入口
将 OpenFlare 与平台业务的数据访问从 model 与 apps 直连迁入 repository,
model 仅保留实体与无 IO 规则;补充 code-check 架构守卫与开发规范。
2026-07-24 17:00:17 +08:00

45 lines
1.9 KiB
Markdown
Raw 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.
# model / repository 分层治理
说明:将 `internal/model` 收敛为无 IO 实体层,`internal/repository` 作为唯一持久化入口。
---
## 1. 目标与背景 (Goal & Context)
* **需求背景**:已提交的 AGENTS 曾允许 model 直接使用 GORM,导致 OpenFlare 业务 CRUD 与平台 repository 双轨并存。工作区目标分层与代码不一致,接手成本高。
* **开发范围 (Scope)**:
* 固化规范:`model` 仅实体 / DTO / 无 IO 规则;`repository` 唯一持久化入口。
* 将 `internal/model` 中现有 `db.DB` / Redis / ClickHouse store 适配迁入 `internal/repository`。
* 全量更新 call site:`model.Get/List/Create…` → `repository.…`。
* 编译通过 + `make format` + 相关单测。
* **Out of Scope**:不改表结构、不改 API 契约、不做业务行为变更;不强制一次重写所有测试风格。
## 2. 设计与决策
* **分层**:
* `apps → repository → model`
* `repository → infra/persistence`(及 `repository/analytics`)
* **禁止** `model → repository`、**禁止** model 内 `db.DB` / Redis / ClickHouse
* **迁移策略**:按文件拆分 package-level IO 函数至同名 `repository` 文件;类型与纯函数留在 model;store 适配整文件迁入 repository。
* **命名**:repository 函数保持原导出名,降低 call site 改动面。
## 3. 具体修改文件清单
### 规范
* #### [MODIFY] `AGENTS.md`
* #### [MODIFY] `docs/design/index.md`
* #### [MODIFY] `docs/plan/index.md`(登记本计划)
### 后端
* #### [MODIFY] `internal/model/*.go`(剥离 IO)
* #### [NEW/MODIFY] `internal/repository/*.go`(承接 CRUD / store)
* #### [MODIFY] `internal/apps/**`、`internal/infra/task/**` 等 call site
## 4. 验证计划
* `go test ./internal/model/... ./internal/repository/...`
* 关键包 `go build ./...`
* `make format` / `make code-check`(在可接受时间内)