docs: switch rust backend to multi-package layout

This commit is contained in:
2026-04-21 00:41:21 +08:00
parent c16a554934
commit e12037740c
9 changed files with 178 additions and 59 deletions

View File

@@ -191,6 +191,17 @@ SpacetimeDB 官方文档对自动迁移的限制很强:
2. 高频变化数据优先事件表化
3. 聚合结果优先投影表 / view而不是频繁重塑旧表结构
### 5.5 主工程必须按多 package 方式组织模块
从当前版本开始Rust 后端固定采用“主工程 + 独立模块 package”的方式组织
1. `apps/api-server` 作为 Axum 主工程,只负责协议装配与模块组合。
2. `apps/spacetime-module` 作为 SpacetimeDB 主工程,只负责聚合各模块 package 的表、reducer、view。
3. 每个独立业务模块必须优先拥有自己的 workspace package再由主工程引用。
4. 只有共享 contract、共享领域内核、平台适配、SpacetimeDB client 这类跨模块能力,才允许使用共享 package。
这样做的目的,是避免把当前 `12` 个既有模块边界重新压缩回单个“大 application package”或“大 domain package”中确保后续重写能继续按模块独立演进。
## 6. 推荐工程结构
本次重写固定在仓库根目录新增 Rust 工作区 `server-rs/`,并与 `server-node/` 同级:
@@ -198,17 +209,30 @@ SpacetimeDB 官方文档对自动迁移的限制很强:
```text
server-rs/
├─ Cargo.toml
├─ crates/
│ ├─ api-server/ # Axum 入口
─ spacetime-module/ # SpacetimeDB Rust 模块(编译为 wasm
│ ├─ application/ # 用例编排层
│ ├─ domain/ # 纯领域类型、枚举、ID、值对象
│ ├─ contracts/ # HTTP DTO / SSE event / 内部 command DTO
│ ├─ auth-service/ # JWT、cookie、provider adapter
│ ├─ oss-service/ # OSS 直传、签名、对象管理
│ ├─ llm-service/ # DashScope / Ark / 其他模型适配
├─ apps/
│ ├─ api-server/ # Axum 主工程负责装配路由、中间件、SSE 与模块引用
─ spacetime-module/ # SpacetimeDB 主工程负责聚合表、reducer、view 并发布 wasm
├─ packages/
│ ├─ module-auth/ # 鉴权与会话模块 package
│ ├─ module-runtime/ # runtime snapshot / settings / profile 模块 package
│ ├─ module-story/ # story 主循环模块 package
│ ├─ module-combat/ # 战斗规则模块 package
│ ├─ module-inventory/ # 背包与奖励模块 package
│ ├─ module-npc/ # NPC 状态与对话模块 package
│ ├─ module-progression/ # 成长与章节推进模块 package
│ ├─ module-quest/ # 任务运行时模块 package
│ ├─ module-runtime-item/ # 运行时物品模块 package
│ ├─ module-custom-world/ # 自定义世界与 agent 模块 package
│ ├─ module-assets/ # 资产任务与对象绑定模块 package
│ ├─ module-editor/ # 编辑器读写模块 package
│ ├─ module-ai/ # AI 编排模块 package
│ ├─ shared-contracts/ # HTTP DTO / SSE event / 前后端兼容 contract
│ ├─ shared-kernel/ # 跨模块共享领域类型、ID、枚举、值对象
│ ├─ platform-auth/ # JWT、cookie、provider adapter
│ ├─ platform-oss/ # OSS 直传、签名、对象管理
│ ├─ platform-llm/ # DashScope / Ark / 其他模型适配
│ ├─ spacetime-client/ # 生成 bindings 后的 DB client adapter
│ └─ tests/ # 集成测试、contract 测试、smoke
│ └─ tests-support/ # 集成测试、contract 测试、smoke 支撑
└─ scripts/
├─ dev.sh / dev.ps1
├─ spacetime-publish.sh
@@ -217,11 +241,17 @@ server-rs/
目录职责约束:
1. `spacetime-module/` 只能写纯状态逻辑,不写网络 / 文件系统
2. `api-server/` 只做协议装配、鉴权、中间件、handler
3. `application/` 编排 Axum、OSS、LLM、SpacetimeDB 之间的流程
4. `domain/` 只放纯数据结构和规则,不碰框架
5. `contracts/` 负责与当前前端兼容的 JSON / SSE 协议
1. `apps/api-server/` 只做协议装配、鉴权、中间件、handler 与模块组合,不把业务模块重新堆回单包
2. `apps/spacetime-module/` 只负责聚合各模块 package 的状态模型,不直接承接外部副作用
3. `packages/module-*` 保持与当前业务模块边界一一对应,必要时可在 package 内部再拆 `application``domain``spacetime` 子层次
4. `packages/shared-contracts/` 负责与当前前端兼容的 JSON / SSE 协议
5. `packages/shared-kernel/` 只放跨模块复用的数据结构和规则,不碰框架
6. `packages/platform-*` 统一承接三方供应商与平台适配。
命名补充说明:
1. 本文后续若出现 `auth-service``oss-service``llm-service``application::...` 等历史逻辑名,统一视为职责标签,而不是强制要求继续存在同名顶层目录。
2. 在新的多 package 版本中,这些职责会落到 `packages/module-*` 内部子层次,或落到 `packages/platform-*``packages/shared-*` 等共享 package 中。
## 7. 目标模块映射