# 代码约定 ## 总体风格 - 代码整体偏 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` ## 空值与语法习惯 - 仓库同时使用普通 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 分层、中文日志、最小抽象。 - 如果后续继续扩展,最需要先统一的是编码、可空规范和部分大文件拆分标准。