Files
cneicy d74c2f08ca feat(packages): 内置 SDK 包并完善 ContextLoader 集成
- 将 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 迁移与旧代码地图
2026-08-18 18:06:34 +08:00

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 分层、编译织入、静态门面和模块化存储抽象的组合。