- 将 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 迁移与旧代码地图
77 lines
3.3 KiB
Markdown
77 lines
3.3 KiB
Markdown
# 代码约定
|
|
|
|
## 总体风格
|
|
|
|
- 代码整体偏 Unity 常规 C# 风格,使用 PascalCase 命名类型与公开成员,私有字段使用前导下划线。
|
|
- 重要入口类大量使用 `public static class`,例如:
|
|
- `Assets/Modules/ShrinkEventBus/Runtime/EventBus.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSave.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSettings.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/MigrationChain.cs`
|
|
- 面向使用者暴露简单 API,内部状态则保留在静态字段中。
|
|
|
|
## 命名约定
|
|
|
|
- 事件类统一以 `Event` 结尾,见 `Assets/Modules/ShrinkDataSaver.Integration.EventBus/DataSaverEvents.cs`。
|
|
- 事件参数类统一以 `EventArgs` 结尾,见 `Assets/Modules/ShrinkDataSaver/Runtime/SaveTypes.cs`。
|
|
- 配置类统一以 `Settings`、`Options`、`Config` 结尾。
|
|
- 编辑器窗口统一以 `EditorWindow` 结尾,见:
|
|
- `Assets/Modules/ShrinkEventBus/Editor/EventBusViewerWindow.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Editor/ShrinkDataSaverEditorWindow.cs`
|
|
|
|
## 模式约定
|
|
|
|
- Unity 运行时与编辑器严格分目录、分 asmdef。
|
|
- 用 Attribute 表达声明式能力:
|
|
- `[EventBusSubscriber]`
|
|
- `[EventSubscribe]`
|
|
- `[Cancelable]`
|
|
- `[HasResult]`
|
|
- 用接口做最小抽象,而不是引入完整容器:
|
|
- `IStorageProvider`
|
|
- `ISaveModule`
|
|
- `ISaveModule<T>`
|
|
|
|
## 空值与语法习惯
|
|
|
|
- 仓库同时使用普通 C# 空值判断和 Unity 对象真值判断。
|
|
- `ShrinkEventBus` 某些文件启用了 `#nullable enable`,例如:
|
|
- `Assets/Modules/ShrinkEventBus/Runtime/EventBase.cs`
|
|
- `Assets/Modules/ShrinkEventBus/Runtime/ListenerList.cs`
|
|
- 但整个仓库并没有统一启用可空引用,说明这是局部使用而非全局规范。
|
|
|
|
## 日志与注释
|
|
|
|
- 日志前缀较统一,常见前缀有:
|
|
- `[EventBus]`
|
|
- `[ShrinkDataSaver]`
|
|
- `[ShrinkDataSaver.Integration]`
|
|
- 源码注释和用户可见菜单文本原本倾向中文。
|
|
- 但当前有多处中文字符串出现乱码,典型位置包括:
|
|
- `Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSave.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/Editor/ShrinkDataSaverEditorWindow.cs`
|
|
- `Assets/Modules/ShrinkDataSaver/README.md`
|
|
- `Assets/Modules/ShrinkDataSaver.Integration.EventBus/README.md`
|
|
|
|
## 错误处理
|
|
|
|
- 运行时代码多采用“抛异常 + 触发失败事件 + Debug.Log”混合策略。
|
|
- 对非关键模块失败通常记录日志后跳过,对关键模块失败则终止保存,见 `Assets/Modules/ShrinkDataSaver/Runtime/ShrinkSave.cs`。
|
|
- 异步 fire-and-forget 分支会用统一包装打印异常,见 `Assets/Modules/ShrinkEventBus/Runtime/EventBus.cs`。
|
|
|
|
## 测试约定
|
|
|
|
- 测试位于 `Assets/Modules/ShrinkDataSaver/Tests`。
|
|
- 同时使用 `[Test]` 与 `[UnityTest]`。
|
|
- 测试通过 `MockStorageProvider` 隔离文件系统,见 `Assets/Modules/ShrinkDataSaver/Tests/MockStorageProvider.cs`。
|
|
|
|
## 可读性与组织
|
|
|
|
- 单文件职责通常比较集中,尤其是 Runtime 层。
|
|
- 但 `ShrinkSave.cs`、`ShrinkDataSaverEditorWindow.cs` 体量偏大,已经承担多个职责。
|
|
|
|
## 结论
|
|
|
|
- 当前代码约定的关键词是:静态门面、Attribute 驱动、asmdef 分层、中文日志、最小抽象。
|
|
- 如果后续继续扩展,最需要先统一的是编码、可空规范和部分大文件拆分标准。
|