feat: split DA and API layers by domain, add parallel route docs

This commit is contained in:
2026-08-10 01:56:09 +08:00
parent 68c5e8ee04
commit 0394da6771
38 changed files with 1156 additions and 437 deletions
+130
View File
@@ -0,0 +1,130 @@
# 并行开发指南(R0
本文档是四名成员并行开发时的代码修改约定。目标是:每个人在自己路线的文件里改动,
不与其他人发生文件级冲突;共享文件只由 R0 聚合入口维护,平时不再堆业务代码。
## 1. 目录约定
页面不得直接读写 Storage 或跨过聚合入口调用底层模块,统一从下面两个入口导入:
```ts
import { getAddressList, addAddress } from '../../utils/store'
import { fetchProducts, createOrder } from '../../utils/api'
```
`src/utils/store/`DA 层,按域拆分:
| 文件 | 归属 | 内容 |
|---|---|---|
| `store/keys.ts` | R0,尽量不改 | openid 作用域 key 与 mock 判断 |
| `store/user.ts` | R0/R3 | 用户信息、账号切换、注册表 |
| `store/design.ts` | R2 | 设计清单本地数据 |
| `store/address.ts` | R2 | 收货地址本地数据 |
| `store/order.ts` | R3 | 订单本地数据与 designToOrder |
| `store/theme.ts` | R0 | 主题模式读写 |
| `store/index.ts` | R0 | 聚合 re-export,只加不删 |
`src/utils/api/`HTTP 接口层,按域拆分:
| 文件 | 归属 | 内容 |
|---|---|---|
| `api/auth.ts` | R0 | 登录、登出、token |
| `api/user.ts` | R0 | 用户资料 |
| `api/product.ts` | R1 | 商品、分类 |
| `api/address.ts` | R2 | 收货地址(待补) |
| `api/design.ts` | R2 | 设计清单(待补) |
| `api/order.ts` | R3 | 订单、支付(待补) |
| `api/upload.ts` | R4 | 上传、词云、线稿(待补) |
| `api/index.ts` | R0 | 聚合 re-export |
类型统一放在 `src/types/index.ts`,或按域新增 `src/types/<domain>.ts`
不要把页面私有类型散落在各个页面里。
## 2. 路线归属
每条路线的完整开发内容、设计 DO/DON'T 与验收标准见 `docs/routes/`
| 文档 | 分支 |
|---|---|
| [R1 商品目录动态化](routes/route-r1-product-catalog.md) | `feat/r1-catalog` |
| [R2 地址 + 设计清单](routes/route-r2-address-design.md) | `feat/r2-address-design` |
| [R3 订单 + 支付占位](routes/route-r3-order-pay.md) | `feat/r3-order-pay` |
| [R4 上传 + 词云 + 线稿](routes/route-r4-upload-wordcloud.md) | `feat/r4-upload-wordcloud` |
| 路线 | 页面 | 后端 | 词云项目 |
|---|---|---|---|
| R1 商品目录 | `index``shop``product` | products/categories、schema 扩展、seed | 不用 |
| R2 地址 + 设计清单 | `address``designList` | addresses CRUD、design-list CRUD、状态映射 | 不用 |
| R3 订单 + 支付占位 | `checkout``orders``orderDetail`、付款按钮 | orders 重算/事务、payments 占位 | 不用 |
| R4 上传 + 词云 + 线稿 | `wordcloud``diy/stickerEdit` | upload、词云适配器、sketch、队列 | 复用,需冻结最小契约 |
文件所有权约定:
- `checkout` 页归 R3R2 只做 `address``designList` 页。
- `profile` 页是只读统计消费者,等 R2/R3 合入后再统一收尾。
- `wordcloud` 项目只有 R4 会碰,其余路线不依赖它。
## 3. 新增接口怎么改
1. 后端先把 Swagger/DTO 定下来,确认字段与状态枚举。
2. 在对应的 `api/<domain>.ts` 里写函数,返回类型对齐 `src/types`
3. 不需要改页面里的导入路径:聚合入口已 re-export 所有域文件,
新函数会自动从 `../../utils/api` 导出。
4. 页面只调用 `api` 层的函数,不在页面里直接写 `http.get`
## 4. 新增本地业务怎么改
1. 判断属于哪个域,写进 `store/<domain>.ts`
2. 若该域已有文件,直接在文件内追加函数;不要新建 `xxx2.ts`
3. 新域需在 `store/index.ts` 增加一行显式 re-export。
4. 页面通过 `../../utils/store` 导入,不直接 import 内部模块路径。
## 5. Git 协作
每路线在 `wechat_wc``wxmp_backend` 使用同名分支:
| 路线 | 分支名 |
|---|---|
| R1 | `feat/r1-catalog` |
| R2 | `feat/r2-address-design` |
| R3 | `feat/r3-order-pay` |
| R4 | `feat/r4-upload-wordcloud` |
日常循环:
```bash
git checkout main && git pull
git checkout -b feat/r1-catalog
# 提交并推送自己的分支
git add -A
git commit -m "feat(catalog): xxx"
git push -u origin feat/r1-catalog
# 主干有更新时,变基到最新
git fetch origin
git rebase origin/main
# 合入:只有合入负责人执行
git checkout main && git pull
git merge --no-ff feat/r1-catalog
git push origin main
```
规则:
- 主干 `main` 保持可运行,禁止直接 push,合入走 Pull Request。
- 后端与前端同名分支是一对,评审时成对看,后端 Swagger 先定契约。
- 不跨路线互相拉分支;主干更新只通过 `rebase origin/main` 获取。
- 合入顺序:R1 先合(R3 服务端金额重算依赖商品表),R2/R4 随后,R3 最后。
## 6. 验证
每次提交前至少保证:
```bash
npm run build:weapp
```
R1 合入前额外跑后端接口 smoke;R2/R3 合入前跑对应页面在微信开发者工具里的手测;
R4 合入前跑一次词云契约 smoke。