docs: switch rust backend to multi-package layout
This commit is contained in:
@@ -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. 目标模块映射
|
||||
|
||||
|
||||
Reference in New Issue
Block a user