# 架构 ## 架构概览 - 这是一个以 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.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 分层、编译织入、静态门面和模块化存储抽象的组合。