2.7 KiB
2.7 KiB
P0-4: R3 + Data 类规范需求详细文档
对齐说明
本文档以 docs/requirements/p0-requirements-set.md 为准。P0 使用 R3 作为响应式基础,不自研响应式系统,不做 UI 自动绑定。
目标
建立游戏运行时 Data 的组织方式、响应式状态表达、ViewModel 访问规则和存档序列化约定。
Data 类规范
public sealed class PlayerData
{
public ReactiveProperty<int> Gold { get; } = new(0);
public ReactiveProperty<int> Level { get; } = new(1);
}
规则:
- 一个 Data 类对应一个业务域。
- Data 类注册在全局 Container 中。
- Data 类保持纯 C#,不依赖 Unity API。
- Data 类不持有 View 或 ViewModel 引用。
- Data 类不包含复杂业务流程逻辑。
- Data 类之间不互相直接引用。
- Data 类使用
ReactiveProperty<T>和ReactiveCollection<T>表达可观察状态。
ViewModel 规则
- ViewModel 可以引用 Data。
- ViewModel 负责 UI 表现逻辑和用户操作逻辑。
- ViewModel 不持有 MonoBehaviour 或具体 View 引用。
- ViewModel 订阅必须加入自己的
CompositeDisposable,或加入FeatureContext.Disposables。
序列化规则
ReactiveProperty<T>序列化为.Value。ReactiveCollection<T>序列化为 JSON 数组。- 反序列化到已有 Data 实例时,更新
.Value或集合内容,不替换 Data 实例。 - 反序列化类型不匹配时抛异常并包含字段名。
事件流规则
P0 允许使用 R3 Subject<T> 做 Feature 内或明确归属的轻量事件流。
规则:
- Subject 生命周期必须有明确所有者。
- Feature 内 Subject 随 Feature Dispose 释放。
- 跨 Feature 持久状态优先使用 Data。
- 不建立全局 Subject 池。
- 不实现独立 EventBus。
暂不做
- 自研响应式系统。
- UI 自动绑定框架。
- 全局 EventBus。
- Data 类 Inspector 可视化。
- 订阅泄漏 Analyzer。
- Data 类之间的复杂关系建模。
验收标准
| # | 标准 | 通过条件 |
|---|---|---|
| 1 | Data 创建 | Data 类用 ReactiveProperty 定义字段 |
| 2 | 全局共享 | 两个 ViewModel Resolve 到同一个 Data 实例 |
| 3 | 响应式同步 | 修改 Data 后订阅者收到通知 |
| 4 | ViewModel 隔离 | ViewModel 不引用 MonoBehaviour 或具体 View |
| 5 | 序列化 ReactiveProperty | JSON 只包含值,不包含内部状态 |
| 6 | 反序列化已有实例 | 已注册 Data 实例被更新而不是替换 |
| 7 | ReactiveCollection | 可序列化为数组并恢复 |
| 8 | 订阅释放 | Dispose 后订阅不再触发 |
| 9 | 纯 C# | Data 类可脱离 Unity 编译 |
依赖关系
Data / ViewModel
├── R3
├── Container
├── ISaveService
└── JSON Converter