Files
FlowScope/docs/requirements/p0-data-r3.md
2026-05-15 15:38:40 +08:00

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