refactor: move server rs workspace entries into crates
This commit is contained in:
@@ -59,7 +59,7 @@
|
||||
|
||||
1. 上述 `12` 个模块是历史基线总量。
|
||||
2. 本轮 active rewrite modules 固定为 `11` 个。
|
||||
3. `editor` 仅保留历史事实,不进入 `server-rs` 主线 package 与阶段验收。
|
||||
3. `editor` 仅保留历史事实,不进入 `server-rs` 主线 crate 与阶段验收。
|
||||
|
||||
## 3. 技术选型后的硬边界
|
||||
|
||||
@@ -200,16 +200,23 @@ SpacetimeDB 官方文档对自动迁移的限制很强:
|
||||
2. 高频变化数据优先事件表化
|
||||
3. 聚合结果优先投影表 / view,而不是频繁重塑旧表结构
|
||||
|
||||
### 5.5 主工程必须按多 package 方式组织模块
|
||||
### 5.5 主工程必须按多 crate 方式组织模块
|
||||
|
||||
从当前版本开始,Rust 后端固定采用“主工程 + 独立模块 package”的方式组织:
|
||||
从当前版本开始,Rust 后端固定采用“主工程 crate + 独立模块 crate”的方式组织。
|
||||
|
||||
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”中,确保后续重写能继续按模块独立演进。
|
||||
1. `crates/` 只是工作区下统一承载 Rust crate 的目录名。
|
||||
2. 目录里的每个独立单元在 Rust 语义上都按 workspace crate 对待。
|
||||
|
||||
组织规则固定为:
|
||||
|
||||
1. `crates/api-server` 作为 Axum 主工程 crate,只负责协议装配与模块组合。
|
||||
2. `crates/spacetime-module` 作为 SpacetimeDB 主工程 crate,只负责聚合各模块 crate 的表、reducer、view。
|
||||
3. 每个独立业务模块必须优先拥有自己的 workspace crate,再由主工程 crate 引用。
|
||||
4. 只有共享 contract、共享领域内核、平台适配、SpacetimeDB client 这类跨模块能力,才允许使用共享 crate。
|
||||
|
||||
这样做的目的,是避免把当前 `12` 个既有模块边界重新压缩回单个“大 application crate”或“大 domain crate”中,确保后续重写能继续按模块独立演进。
|
||||
|
||||
## 6. 推荐工程结构
|
||||
|
||||
@@ -218,22 +225,21 @@ SpacetimeDB 官方文档对自动迁移的限制很强:
|
||||
```text
|
||||
server-rs/
|
||||
├─ Cargo.toml
|
||||
├─ 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-ai/ # AI 编排模块 package
|
||||
├─ crates/
|
||||
│ ├─ api-server/ # Axum 主工程 crate,负责装配路由、中间件、SSE 与模块引用
|
||||
│ ├─ spacetime-module/ # SpacetimeDB 主工程 crate,负责聚合表、reducer、view 并发布 wasm
|
||||
│ ├─ module-auth/ # 鉴权与会话模块 crate
|
||||
│ ├─ module-runtime/ # runtime snapshot / settings / profile 模块 crate
|
||||
│ ├─ module-story/ # story 主循环模块 crate
|
||||
│ ├─ module-combat/ # 战斗规则模块 crate
|
||||
│ ├─ module-inventory/ # 背包与奖励模块 crate
|
||||
│ ├─ module-npc/ # NPC 状态与对话模块 crate
|
||||
│ ├─ module-progression/ # 成长与章节推进模块 crate
|
||||
│ ├─ module-quest/ # 任务运行时模块 crate
|
||||
│ ├─ module-runtime-item/ # 运行时物品模块 crate
|
||||
│ ├─ module-custom-world/ # 自定义世界与 agent 模块 crate
|
||||
│ ├─ module-assets/ # 资产任务与对象绑定模块 crate
|
||||
│ ├─ module-ai/ # AI 编排模块 crate
|
||||
│ ├─ shared-contracts/ # HTTP DTO / SSE event / 前后端兼容 contract
|
||||
│ ├─ shared-kernel/ # 跨模块共享领域类型、ID、枚举、值对象
|
||||
│ ├─ platform-auth/ # JWT、cookie、provider adapter
|
||||
@@ -250,17 +256,17 @@ server-rs/
|
||||
|
||||
目录职责约束:
|
||||
|
||||
1. `apps/api-server/` 只做协议装配、鉴权、中间件、handler 与模块组合,不把业务模块重新堆回单包。
|
||||
2. `apps/spacetime-module/` 只负责聚合各模块 package 的状态模型,不直接承接外部副作用。
|
||||
3. `packages/module-*` 保持与当前业务模块边界一一对应,已明确退出本轮的 `editor` 遗留模块除外;必要时可在 package 内部再拆 `application`、`domain`、`spacetime` 子层次。
|
||||
4. `packages/shared-contracts/` 负责与当前前端兼容的 JSON / SSE 协议。
|
||||
5. `packages/shared-kernel/` 只放跨模块复用的数据结构和规则,不碰框架。
|
||||
6. `packages/platform-*` 统一承接三方供应商与平台适配。
|
||||
1. `crates/api-server/` 只做协议装配、鉴权、中间件、handler 与模块组合,不把业务模块重新堆回单包。
|
||||
2. `crates/spacetime-module/` 只负责聚合各模块 crate 的状态模型,不直接承接外部副作用。
|
||||
3. `crates/module-*` 保持与当前业务模块边界一一对应,已明确退出本轮的 `editor` 遗留模块除外;必要时可在 crate 内部再拆 `application`、`domain`、`spacetime` 子层次。
|
||||
4. `crates/shared-contracts/` 负责与当前前端兼容的 JSON / SSE 协议。
|
||||
5. `crates/shared-kernel/` 只放跨模块复用的数据结构和规则,不碰框架。
|
||||
6. `crates/platform-*` 统一承接三方供应商与平台适配。
|
||||
|
||||
命名补充说明:
|
||||
|
||||
1. 本文后续若出现 `auth-service`、`oss-service`、`llm-service`、`application::...` 等历史逻辑名,统一视为职责标签,而不是强制要求继续存在同名顶层目录。
|
||||
2. 在新的多 package 版本中,这些职责会落到 `packages/module-*` 内部子层次,或落到 `packages/platform-*`、`packages/shared-*` 等共享 package 中。
|
||||
2. 在新的多 crate 版本中,这些职责会落到 `crates/module-*` 内部子层次,或落到 `crates/platform-*`、`crates/shared-*` 等共享 crate 中。
|
||||
|
||||
## 7. 目标模块映射
|
||||
|
||||
|
||||
Reference in New Issue
Block a user