- 将 ShrinkEventBus、ShrinkDataSaver 及其 EventBus 集成从 gitlink 转为仓库直接维护的完整 UPM 包,补齐运行时、编辑器工具、测试与文档 - 新增 Command 和 Network 的 App 集成组件,支持 ContextLoader 服务发布、可逆注销及 Network Loopback 生命周期管理 - 更新 Starter 与演示组合逻辑,缺失模块时可注册、已有兼容安装器时可覆盖,并补充宿主启动断言 - 升级内部包依赖与 Shared CodeGen 包定义,放宽 Integration.App 包的 Git 忽略规则 - 将独立服务器生成器改为基于已编译程序集的语义扫描,支持 partial、复杂泛型、命名冲突检测及模板 SHA-256 覆写保护 - 新增 Network 语义扫描、模板保护和 App 组件生命周期测试 - 新增真实 UPM 消费工程验证脚本,校验内部版本一致性、程序集加载及 EditMode 测试 - 重构当前架构文档并归档已完成的 Cordis 迁移与旧代码地图
102 lines
3.9 KiB
Markdown
102 lines
3.9 KiB
Markdown
# 架构
|
|
|
|
## 架构概览
|
|
|
|
- 这是一个以 Unity 包为边界的 SDK 单仓架构。
|
|
- 主要由三个可分发模块组成:
|
|
- `ShrinkEventBus`
|
|
- `ShrinkDataSaver`
|
|
- `ShrinkDataSaver.Integration.EventBus`
|
|
- 每个模块都按 `Runtime`、`Editor`、`Tests` 或 `CodeGen` 做职责分离。
|
|
|
|
## 核心分层
|
|
|
|
- 事件总线层
|
|
- 公开入口在 `Assets/Modules/ShrinkEventBus/Runtime/EventBus.cs`
|
|
- 负责注册、触发、注销、调试记录和实例注册状态
|
|
- 事件元数据与执行层
|
|
- `Assets/Modules/ShrinkEventBus/Runtime/EventBase.cs`
|
|
- `Assets/Modules/ShrinkEventBus/Runtime/ListenerList.cs`
|
|
- `Assets/Modules/ShrinkEventBus/Runtime/EventHandlerInfo.cs`
|
|
- `Assets/Modules/ShrinkEventBus/Runtime/EventPool.cs`
|
|
- 编译织入层
|
|
- `Assets/Modules/ShrinkEventBus/CodeGen/Editor/EventBusILPostProcessor.cs`
|
|
- 负责给订阅者自动注入 `AutoRegister` 与 `UnregisterInstance`
|
|
- 存档核心层
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSave.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSettings.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/SaveTypes.cs`
|
|
- 存储与安全层
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/IStorageProvider.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/LocalStorageProvider.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/SaveEncryptor.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/DataSerializer.cs`
|
|
- 版本迁移层
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/MigrationChain.cs`
|
|
- Unity 入口层
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/ShrinkDataSaverBootstrap.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/ShrinkDataSaverSettings.cs`
|
|
- 集成桥接层
|
|
- `Assets/Modules/ShrinkDataSaver.Integration.EventBus/DataSaverEventBusBridge.cs`
|
|
|
|
## 主要数据流
|
|
|
|
## EventBus 数据流
|
|
|
|
- 注册流:
|
|
- `[EventBusSubscriber]` + `[EventSubscribe]`
|
|
- `EventBusILPostProcessor` 在编译期织入
|
|
- 运行时通过 `EventBus.AutoRegister(this)` 完成注册
|
|
- 触发流:
|
|
- `EventBus.TriggerEvent` 或 `EventBus.TriggerEventAsync`
|
|
- 从 `EventCache<TEvent>.List` 取监听列表
|
|
- `ListenerList` 返回已排序快照
|
|
- 依优先级逐个执行 handler
|
|
|
|
## DataSaver 数据流
|
|
|
|
- 保存流:
|
|
- `ShrinkSave.SaveSlotAsync`
|
|
- 序列化所有已注册模块
|
|
- 可选加密
|
|
- 经 `IStorageProvider.WriteAsync` 落盘
|
|
- 触发保存完成或失败事件
|
|
- 加载流:
|
|
- `ShrinkSave.LoadSlotAsync`
|
|
- 从 `IStorageProvider.ReadAsync` 读取
|
|
- 可选解密
|
|
- 必要时执行 `MigrationChain.Apply`
|
|
- 分发给每个已注册模块反序列化
|
|
- 缓存 `_loadedModuleData` 供查询接口使用
|
|
|
|
## 生命周期入口
|
|
|
|
- `EventBus` 通过静态构造与运行时初始化参与系统启动。
|
|
- `ShrinkDataSaverBootstrap` 是 `MonoBehaviour` 入口,负责:
|
|
- 初始化 `ShrinkSettings`
|
|
- 初始化 `ShrinkSave`
|
|
- 自动保存轮询
|
|
- 应用暂停与退出时落盘设置
|
|
- `DataSaverEventBusBridge` 在 `AfterAssembliesLoaded` 订阅 DataSaver 原生事件。
|
|
|
|
## 架构风格
|
|
|
|
- 偏“静态门面 + 小型基础设施”的工具库风格。
|
|
- 对业务方暴露的是简单静态 API,而不是依赖注入容器。
|
|
- 内部通过接口和 asmdef 边界做最小抽象,典型例子是 `IStorageProvider`。
|
|
- 编辑器功能与运行时彻底分离,避免运行时代码依赖 UnityEditor。
|
|
|
|
## 入口判断
|
|
|
|
- 真正的运行时入口不是某个 `Main.cs`,而是 Unity 生命周期钩子和静态类。
|
|
- 如果要阅读项目行为,优先从以下文件开始:
|
|
- `Assets/Modules/ShrinkEventBus/Runtime/EventBus.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/ShrinkDataSaverBootstrap.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSave.cs`
|
|
- `Assets/Modules/ShrinkDataSaver.Integration.EventBus/DataSaverEventBusBridge.cs`
|
|
|
|
## 结论
|
|
|
|
- 这套架构的重点是“低侵入接入 Unity 项目”,而不是重框架化。
|
|
- 真正的设计价值在于 asmdef 分层、编译织入、静态门面和模块化存储抽象的组合。
|