ADR-0002: Cargo Workspace 布局与命名¶
- 状态:已接受
- 日期:2026-06-10
- 决策者:AXON 架构组
背景¶
AXON 由多个功能模块组成(核心、回测、RL、交易所、风控等)。 需要在 Cargo workspace 中组织 crate,定义依赖方向与命名规范。
决策¶
目录布局¶
所有 crate 位于 crates/ 子目录下,统一命名为 axon-<功能>:
axon/
├── Cargo.toml # workspace 根
├── crates/
│ ├── axon-core/ # 共享类型(无 axon-* 依赖)
│ ├── axon-backtest/ # 依赖 axon-core
│ ├── axon-cli/ # 依赖 axon-backtest,binary 入口
│ └── ...
依赖方向规则¶
axon-core不依赖任何其他 axon-* crate- 业务逻辑 crate 依赖数据层
- 接口层 crate(
axon-pyo3、axon-cli)依赖业务逻辑 - 禁止循环依赖与跨层反向依赖
公共依赖管理¶
- 所有共享依赖在 workspace 根
[workspace.dependencies]声明 - 子 crate 通过
{ workspace = true }引用,确保版本统一 - 子 crate 自己的
Cargo.toml仅声明包元信息与独有依赖
Feature 组合¶
- workspace 根不定义
[features] - Feature 组合在
axon-cli(顶层 binary crate)声明 - Phase 0 阶段仅暴露
backtest/metrics等最小 feature
后果¶
正面¶
- 所有 crate 共享同一依赖版本,避免冲突
- 依赖关系单向且清晰,编译时易于排查
- Feature 组合集中在 CLI 层,使用方一目了然
负面¶
- 大量 crate 共享同一
Cargo.lock,锁文件较大 - 新增 crate 时需手动更新
members列表(可借助cargo workspace工具)