Axum 很轻。 轻的另一面就是:
你必须主动组织结构。
一个能长大的 Axum 项目,最小可以长这样:
src/
├── main.rs
├── app.rs
├── state.rs
├── error.rs
├── routes/
│ ├── mod.rs
│ ├── public.rs
│ └── permits.rs
├── middleware/
│ └── auth.rs
├── extractors/
│ └── current_officer.rs
├── services/
│ └── permit_service.rs
└── tests/
└── permits.rs职责分工可以这样理解:
main.rs -> 开关口、装配环境
app.rs -> 组装整张 Router 地图
state.rs -> 总关底册
error.rs -> 标准拒签通知
routes/ -> 各个窗口入口
middleware/ -> 安检带
extractors/ -> 验货设备
services/ -> 真正处理业务的后台科室
tests/ -> 通关演练脚本很重要的一条纪律:
handler 尽量薄。
窗口层应该主要负责:
- 提取材料
- 调用 service
- 返回回执
不要让窗口自己:
- 写 SQL
- 跑复杂事务
- 发消息队列
- 编排多个外部服务
- 写大段鉴权逻辑
不然总关会从“专业窗口”退化成“窗口兼仓库兼审计兼物流中心”。