Skip to content

refactor: 调整Utility和Helper的组织方式 - #13

Open
dotlive wants to merge 1 commit into
GameFrameX:mainfrom
dotlive:main
Open

dotlive wants to merge 1 commit into
GameFrameX:mainfrom
dotlive:main

Conversation

@dotlive

@dotlive dotlive commented Aug 27, 2026

Copy link
Copy Markdown

变更

验证

关联

Fixes GFX-xxx
Closes #xxx

Fixes GFX-xxx 用于 Linear 在 PR 合并后自动进入 Done。
Closes #xxx 用于 GitHub Issue 在 PR 合并后自动关闭。
如果没有对应的 Linear 或 GitHub Issue,请删除占位符并说明原因。

@coderabbitai

coderabbitai Bot commented Aug 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 215 files, which is 115 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8aafabed-d486-40b1-a465-9e03da5013bb

📥 Commits

Reviewing files that changed from the base of the PR and between 2fae759 and d89d978.

📒 Files selected for processing (215)
  • Editor/BuildHotfix/BuildHotfixHelper.cs
  • Editor/BuildProduct/BuildProductHelper.cs
  • Editor/Cropping/CroppingWindow.cs
  • Editor/Extension.meta
  • Editor/Extension/ObjectExtensions.cs
  • Editor/Extension/ObjectExtensions.cs.meta
  • Editor/Helper.meta
  • Editor/Helper/EditorHelper.cs
  • Editor/Helper/EditorHelper.cs.meta
  • Editor/Inspector/BaseComponentInspector.cs
  • Editor/Inspector/ComponentTypeComponentInspector.cs
  • Editor/Inspector/ObjectPoolComponentInspector.cs
  • Editor/Inspector/ReferencePoolComponentInspector.cs
  • Editor/Misc/HelperInfo.cs
  • Editor/Misc/OpenFolder.cs
  • Editor/Misc/ProjectPathTitlebarModifier.cs
  • Editor/Misc/ProjectPathTitlebarModifier.cs.meta
  • Editor/Misc/TypeHelper.cs
  • Runtime/Base/BaseComponent.cs
  • Runtime/Base/DataStruct/TypeNamePair.cs
  • Runtime/Base/EventPool/EventPool.cs
  • Runtime/Base/GameFrameworkEntry.cs
  • Runtime/Base/GameFrameworkSerializer.cs
  • Runtime/Base/ReferencePool/ReferencePool.cs
  • Runtime/Base/Variable/GenericVariable.cs
  • Runtime/Constant.meta
  • Runtime/Constant/FileNameSuffix.cs
  • Runtime/Constant/FileNameSuffix.cs.meta
  • Runtime/Extension/Extension/BinaryExtension.cs
  • Runtime/Extension/Extension/CollectionExtensions.cs
  • Runtime/Extension/Extension/StringExtensions.cs
  • Runtime/Extension/UnityEngine.Camera.meta
  • Runtime/Extension/UnityEngine.Camera/UnityEngine.CameraExtension.cs
  • Runtime/Extension/UnityEngine.Camera/UnityEngine.CameraExtension.cs.meta
  • Runtime/Extension/UnityEngine.GameObject/UnityEngine.GameObjectExtension.cs
  • Runtime/Extension/UnityEngine.Renderer.meta
  • Runtime/Extension/UnityEngine.Renderer/UnityEngine.RendererExtension.cs
  • Runtime/Extension/UnityEngine.Renderer/UnityEngine.RendererExtension.cs.meta
  • Runtime/Extension/UnityEngine.Transform/UnityEngine.TransformExtension.cs
  • Runtime/GameFrameXCroppingHelper.cs
  • Runtime/Helper/Compression.meta
  • Runtime/Helper/Compression/GameFrameworkCompression.ICompressionHelper.cs
  • Runtime/Helper/Compression/GameFrameworkCompression.ICompressionHelper.cs.meta
  • Runtime/Helper/Compression/GameFrameworkCompression.cs
  • Runtime/Helper/Compression/GameFrameworkCompression.cs.meta
  • Runtime/Helper/DefaultCompressionHelper.cs
  • Runtime/Helper/DefaultTextHelper.cs
  • Runtime/Helper/DistinctHelper.cs
  • Runtime/Helper/DistinctHelper.cs.meta
  • Runtime/Helper/FileHelper.cs.meta
  • Runtime/Helper/GameObjectHelper.cs
  • Runtime/Helper/GameVersion.meta
  • Runtime/Helper/GameVersion/GameVersion.IVersionHelper.cs
  • Runtime/Helper/GameVersion/GameVersion.IVersionHelper.cs.meta
  • Runtime/Helper/GameVersion/GameVersion.cs
  • Runtime/Helper/GameVersion/GameVersion.cs.meta
  • Runtime/Helper/Helper.cs
  • Runtime/Helper/Json.meta
  • Runtime/Helper/Json/GameFrameworkJson.IJsonHelper.cs
  • Runtime/Helper/Json/GameFrameworkJson.IJsonHelper.cs.meta
  • Runtime/Helper/Json/GameFrameworkJson.cs
  • Runtime/Helper/Json/GameFrameworkJson.cs.meta
  • Runtime/Helper/LitJsonHelper.cs
  • Runtime/Helper/Log.meta
  • Runtime/Helper/Log/GameFrameworkLog.ILogHelper.cs
  • Runtime/Helper/Log/GameFrameworkLog.ILogHelper.cs.meta
  • Runtime/Helper/Log/GameFrameworkLog.cs
  • Runtime/Helper/Log/GameFrameworkLog.cs.meta
  • Runtime/Helper/Log/GameFrameworkLogLevel.cs
  • Runtime/Helper/Log/GameFrameworkLogLevel.cs.meta
  • Runtime/Helper/NetworkHelper.cs
  • Runtime/Helper/NetworkHelper.cs.meta
  • Runtime/Helper/ObjectHelper.cs
  • Runtime/Helper/ObjectHelper.cs.meta
  • Runtime/Helper/PathHelper.cs
  • Runtime/Helper/PathHelper.cs.meta
  • Runtime/Helper/RandomHelper.cs
  • Runtime/Helper/RandomHelper.cs.meta
  • Runtime/Helper/Text.meta
  • Runtime/Helper/Text/GameFrameworkText.ITextHelper.cs
  • Runtime/Helper/Text/GameFrameworkText.ITextHelper.cs.meta
  • Runtime/Helper/Text/GameFrameworkText.cs
  • Runtime/Helper/Text/GameFrameworkText.cs.meta
  • Runtime/ObjectPool/ObjectBase.cs
  • Runtime/ObjectPool/ObjectPoolManager.Object.cs
  • Runtime/ObjectPool/ObjectPoolManager.ObjectPool.cs
  • Runtime/ObjectPool/ObjectPoolManager.cs
  • Runtime/RuntimeHost/GameFrameXRuntimeHost.cs
  • Runtime/RuntimeHost/GameFrameXRuntimeManagerResolver.cs
  • Runtime/RuntimeHost/GameFrameXRuntimePlanner.cs
  • Runtime/RuntimeHost/GameFrameXRuntimeScanner.cs
  • Runtime/Utility/ApplicationUtility.MiniGame.cs
  • Runtime/Utility/ApplicationUtility.MiniGame.cs.meta
  • Runtime/Utility/ApplicationUtility.cs
  • Runtime/Utility/ApplicationUtility.cs.meta
  • Runtime/Utility/AssemblyUtility.cs
  • Runtime/Utility/AssemblyUtility.cs.meta
  • Runtime/Utility/AssetPathUtility.cs
  • Runtime/Utility/AssetPathUtility.cs.meta
  • Runtime/Utility/ConverterUtility.cs
  • Runtime/Utility/ConverterUtility.cs.meta
  • Runtime/Utility/DirectoryUtility.cs
  • Runtime/Utility/DirectoryUtility.cs.meta
  • Runtime/Utility/DoTweenUtility.cs
  • Runtime/Utility/DoTweenUtility.cs.meta
  • Runtime/Utility/EncryptionUtility.Aes.cs
  • Runtime/Utility/EncryptionUtility.Aes.cs.meta
  • Runtime/Utility/EncryptionUtility.Dsa.cs
  • Runtime/Utility/EncryptionUtility.Dsa.cs.meta
  • Runtime/Utility/EncryptionUtility.Rsa.cs
  • Runtime/Utility/EncryptionUtility.Rsa.cs.meta
  • Runtime/Utility/EncryptionUtility.cs
  • Runtime/Utility/EncryptionUtility.cs.meta
  • Runtime/Utility/FileUtility.cs
  • Runtime/Utility/FileUtility.cs.meta
  • Runtime/Utility/GameObjectUtility.cs
  • Runtime/Utility/GameObjectUtility.cs.meta
  • Runtime/Utility/HashUtility.HMACSha256.cs
  • Runtime/Utility/HashUtility.HMACSha256.cs.meta
  • Runtime/Utility/HashUtility.MD5.cs
  • Runtime/Utility/HashUtility.MD5.cs.meta
  • Runtime/Utility/HashUtility.MurmurHash3.cs
  • Runtime/Utility/HashUtility.MurmurHash3.cs.meta
  • Runtime/Utility/HashUtility.Sha1.cs
  • Runtime/Utility/HashUtility.Sha1.cs.meta
  • Runtime/Utility/HashUtility.XXHash.cs
  • Runtime/Utility/HashUtility.XXHash.cs.meta
  • Runtime/Utility/HashUtility.cs
  • Runtime/Utility/HashUtility.cs.meta
  • Runtime/Utility/IdGeneratorUtility.cs
  • Runtime/Utility/IdGeneratorUtility.cs.meta
  • Runtime/Utility/Log.cs
  • Runtime/Utility/MarshalUtility.cs
  • Runtime/Utility/MarshalUtility.cs.meta
  • Runtime/Utility/MathUtility.cs
  • Runtime/Utility/MathUtility.cs.meta
  • Runtime/Utility/NetworkUtility.cs
  • Runtime/Utility/NetworkUtility.cs.meta
  • Runtime/Utility/ObjectUtility.cs
  • Runtime/Utility/ObjectUtility.cs.meta
  • Runtime/Utility/PathUtility.cs
  • Runtime/Utility/PathUtility.cs.meta
  • Runtime/Utility/PositionUtility.cs
  • Runtime/Utility/PositionUtility.cs.meta
  • Runtime/Utility/RandomUtility.cs
  • Runtime/Utility/RandomUtility.cs.meta
  • Runtime/Utility/ShellUtility.cs
  • Runtime/Utility/ShellUtility.cs.meta
  • Runtime/Utility/Utility.Assembly.cs
  • Runtime/Utility/Utility.Asset.Path.cs
  • Runtime/Utility/Utility.Compression.ICompressionHelper.cs
  • Runtime/Utility/Utility.Compression.ICompressionHelper.cs.meta
  • Runtime/Utility/Utility.Compression.cs
  • Runtime/Utility/Utility.Compression.cs.meta
  • Runtime/Utility/Utility.Const.FileNameSuffix.cs
  • Runtime/Utility/Utility.Converter.cs
  • Runtime/Utility/Utility.Encryption.Aes.cs
  • Runtime/Utility/Utility.Encryption.Dsa.cs
  • Runtime/Utility/Utility.Encryption.Rsa.cs
  • Runtime/Utility/Utility.Encryption.cs
  • Runtime/Utility/Utility.File.cs
  • Runtime/Utility/Utility.Hash.HMACSha256.cs
  • Runtime/Utility/Utility.Hash.Md5.cs
  • Runtime/Utility/Utility.Hash.MurmurHash3.cs
  • Runtime/Utility/Utility.Hash.Sha1.cs
  • Runtime/Utility/Utility.Hash.XxHash.cs
  • Runtime/Utility/Utility.IdGenerator.cs
  • Runtime/Utility/Utility.Json.IJsonHelper.cs.meta
  • Runtime/Utility/Utility.Json.cs
  • Runtime/Utility/Utility.Json.cs.meta
  • Runtime/Utility/Utility.Marshal.cs
  • Runtime/Utility/Utility.Net.cs
  • Runtime/Utility/Utility.Object.cs
  • Runtime/Utility/Utility.Path.cs
  • Runtime/Utility/Utility.RandomUtility.cs
  • Runtime/Utility/Utility.Text.ITextHelper.cs
  • Runtime/Utility/Utility.Text.ITextHelper.cs.meta
  • Runtime/Utility/Utility.Text.cs.meta
  • Runtime/Utility/Utility.Verifier.Crc32.cs
  • Runtime/Utility/Utility.Verifier.Crc64.cs
  • Runtime/Utility/Utility.Verifier.cs
  • Runtime/Utility/Utility.cs.meta
  • Runtime/Utility/VerifierUtility.Crc32.cs
  • Runtime/Utility/VerifierUtility.Crc32.cs.meta
  • Runtime/Utility/VerifierUtility.Crc64.cs
  • Runtime/Utility/VerifierUtility.Crc64.cs.meta
  • Runtime/Utility/VerifierUtility.cs
  • Runtime/Utility/VerifierUtility.cs.meta
  • Runtime/Utility/ZipUtility.cs
  • Runtime/Utility/ZipUtility.cs.meta
  • Tests/AesEncryptionTests.cs
  • Tests/MathUtilityTests.cs
  • Tests/MathUtilityTests.cs.meta
  • Tests/ObjectHelperTests.cs
  • Tests/ObjectHelperTests.cs.meta
  • Tests/RandomHelperTests.cs
  • Tests/RandomHelperTests.cs.meta
  • Tests/UtilityConverterTests.cs
  • Tests/UtilityDirectoryTests.cs
  • Tests/UtilityDirectoryTests.cs.meta
  • Tests/UtilityEncryptionAesTests.cs
  • Tests/UtilityEncryptionRsaTests.cs
  • Tests/UtilityHashHMACSha256Tests.cs
  • Tests/UtilityHashMd5Tests.cs
  • Tests/UtilityHashMurmurHash3Tests.cs
  • Tests/UtilityHashSha1Tests.cs
  • Tests/UtilityHashXxHashTests.cs
  • Tests/UtilityIdGeneratorTests.cs
  • Tests/UtilityMarshalTests.cs
  • Tests/UtilityObjectTests.cs
  • Tests/UtilityPathTests.cs
  • Tests/UtilityRandomUtilityTests.cs
  • Tests/UtilityTextTests.cs
  • Tests/UtilityVerifierCrc32Tests.cs
  • Tests/UtilityVerifierCrc64Tests.cs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

没有命名空间包含

@@ -0,0 +1,307 @@
namespace GameFrameX.Runtime
{
/// <summary>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

怎么两套注释

@AlianBlank AlianBlank left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ShellUtility 没有考虑跨系统的问题

@AlianBlank AlianBlank left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review 结论:Request Changes

重构主体方向没问题(Utility.Xxx 嵌套分部类 → 顶层 XxxUtility,meta GUID 全部保留,测试迁移完整),但存在编译级硬伤与大量超范围改动,建议先整改再合。


🔴 阻塞问题

1. 编译错误:GameFrameXCroppingHelper.cs 引用了不存在的类型

_ = typeof(GameFrameX.Runtime.marshalUtility); // 小写 m

类声明是 MarshalUtility,C# 大小写敏感,此行必然 CS0246 —— 说明 PR 未经过编译验证。

2. PR 描述未填写

变更 / 验证 / 关联均为模板占位符。±12,000 行、215 文件的重构缺少:动机说明、命名规则(哪些 Helper 改名哪些保留)、编译与测试验证记录。

3. 裁剪保根列表回归

GameFrameXCroppingHelper 的 typeof 保根清单删除了 CameraHelper / UnityRendererHelper,但没有补上替代的 UnityEngineCameraExtension / UnityEngineRendererExtension。开启 managed stripping 的构建会把这两个扩展类裁掉。


🟠 高优先级

4. Scope creep:混入大量与"组织方式调整"无关的新功能,建议拆分独立 PR

内容 位置
276 行进程执行模块(接口/委托/事件) Runtime/Utility/ShellUtility.cs
反射改标题栏的 Editor 功能 Editor/Misc/ProjectPathTitlebarModifier.cs
ToInt/ToLong/Print/WithColor/WithSize 等 49 行 Runtime/Extension/Extension/StringExtensions.cs
GetAssetPath/GetMaterialTextures 等 Editor/Extension/ObjectExtensions.cs
GetBytesSize/DeleteIfExists Runtime/Utility/FileUtility.cs
10 个新扩展方法 Runtime/Extension/UnityEngine.GameObject/UnityEngine.GameObjectExtension.cs

5. ShellUtility 放在 Runtime 程序集(安全 + 职责双重问题)

运行时程序集暴露 ExecuteCommand(command, args) 任意命令执行 API,会打进正式包与游戏构建。此类工具应归 Editor 程序集。另外:ShellArgs/ShellResult 用公有字段而非属性;行内 // 注释与项目 XML doc 风格不符;零测试。

6. ProjectPathTitlebarModifier.cs 多处问题

  • 反射 Unity 非公开 API(ApplicationTitleDescriptorupdateMainWindowTitle),Unity 升级随时失效;First(...) 找不到类型直接抛异常
  • 类名 ProjectTitleModifier ≠ 文件名 ProjectPathTitlebarModifier.cs
  • 无命名空间(项目其余代码都在 GameFrameX.* 下)
  • InitializeOnLoadMethod + _ = Task.Delay(2000) fire-and-forget hack

7. 破坏性 API 变更无迁移说明

Utility.Xxx 公开入口全部直接删除、无兼容层。下游工程(Unity 客户端工程就有 10+ 文件引用 Utility.Xxx、4 个引用旧 Helper 名)升级即编译失败。这属于 semver major 变更,需要迁移说明。GameObjectHelper.Create(Transform, string) 重载直接消失(变成 TransformExtension.CreateChild 扩展方法)也没有交代。


🟡 中优先级

8. UnityEngineGameObjectExtension 代码质量

  • Destroy(this GameObject)UnityEngine.Object.Destroy 极易混淆
  • FindChildGamObjectByName 保留拼写错误(Gam→Game),且同一逻辑在 GameObjectUtilityGameObjectExtension 两处重复实现
  • SetLayerif (gameObject.layer != layer) 比较冗余;CachedTransforms.Clear() 冗余(GetComponentsInChildren 本身会清空列表);静态共享缓存列表有重入隐患;返回结果含自身与开头赋值重复
  • 扩展方法内 Debug.Assert(!ReferenceEquals(gameObject, null)):release 下 Assert 被剔除,变成远离调用点的 NRE

9. StringExtensions 的调试 API 进 Runtime

Print() 直接 Debug.Log 且默认绿色富文本 —— 框架已有 GameFrameworkLog 日志体系。ToInt/ToLong/ToFloat/ToDoubleConverterUtility(941 行)职责重叠。

10. 命名不一致

  • HashUtility.MD5.cs / HashUtility.XXHash.cs(缩写全大写)vs 同族 HashUtility.Sha1.cs / HashUtility.HMACSha256.cs;旧名 Md5.cs / XxHash.cs 反而符合 .NET 规范
  • GameFrameworkText/Json/Compression(前缀式)与 XxxUtility(后缀式)两套体系并存;EditorHelper / LitJsonHelper / TimerHelper 等 Helper 名保留 —— 改名规则未说明
  • HashUtility.cs 是只有空 { } 的 partial 壳文件,冗余

11. 大文件整文件重写,无法 review、blame 断裂

  • GameFrameworkLog.cs:rename 后 +2730 −2730,每行都变(纯移动应为 0/0),疑似编码/行尾/注释重排,patch 超限无法审查
  • ZipUtility.cs +376 −377:逐行插英文 remarks 注释导致全文件 diff
  • EditorHelper:移除 BOM + 清行尾空格混进功能改动

建议:纯移动的文件去掉混入的格式/注释改动;BOM/行尾统一单独提交。

12. GameFrameXCroppingHelper.cs 文件末尾丢失换行符\ No newline at end of file

13. EditorHelper 挪到 Editor 程序集且命名空间 GameFrameX.RuntimeGameFrameX.Editor,meta 换新 GUID(原 Utility.cs.meta 删除)。如有代码引用旧命名空间会断。


🟢 已核对、无需修改的点

  • meta GUID 处理正确:内容大改的文件 meta 均为 rename(GUID 保留);FileUtility 的 GUID 取自 Utility.File.cs.metaFileHelper.cs.meta 直接删)—— 纯静态类无序列化引用,可接受
  • 测试迁移完整ObjectHelperTests(136 行)删除是去重(Swap 测试在 UtilityObjectTests 已保留);RemoveEmptyDirectory 测试迁入 UtilityDirectoryTestsRandomUtility 测试净增
  • FileNameSuffix 16 个常量 1:1 迁移无丢失;BaseComponent.cs 388 行 diff 中 370 行是纯 API 引用替换
  • 未发现 C# 9+ 语法、无括号控制流等编码规范违规

建议整改顺序

  1. marshalUtility 编译错误 + 补 Camera/Renderer 裁剪保根(阻塞)
  2. 补全 PR 描述:命名规则、迁移说明、验证记录
  3. 把 ShellUtility、ProjectPathTitlebarModifier、StringExtensions 等新功能拆出去单独 PR
  4. 纯移动的文件(GameFrameworkLog.cs 等)去掉混入的格式改动,恢复纯移动 diff

@AlianBlank

Copy link
Copy Markdown
Collaborator

更正说明(Review 问题勘误)

对前一条 review 做两处更正,其余问题经对 PR head 真实代码二次复核均属实。

1. 撤回「问题 1:marshalUtility 编译错误」——系误报,向作者致歉。

复核 PR head 实际代码,Runtime/GameFrameXCroppingHelper.cs:100typeof(GameFrameX.Runtime.MarshalUtility),大小写正确,不存在编译错误。基于该误报的「PR 未经过编译验证」推断一并撤回。

2. 修正「问题 11」中关于全文件 diff 的归因:

  • ZipUtility.cs / GameFrameworkLog.cs / BaseComponent.cs 出现整文件 diff 的根因是 CRLF→LF 行尾统一(main 版为全 CRLF,本 PR 统一为 LF,仓库当前无 .gitattributes),并非"逐行插入英文 remarks"——该注释在 main 版即已存在,此描述有误。
  • 忽略空白后的实质差异经核验是干净的:ZipUtility.cs 仅类名 ZipHelperZipUtility 一行;GameFrameworkLog.csUtility.TextGameFrameworkText API 改名适配 + 版权头更新。无逻辑混入。
  • 因此问题 11 的建议调整为:行尾统一建议配合新增 .gitattributes* text=auto 或显式 *.cs text eol=lf)固化仓库约定,并在 PR 描述注明"本 PR 统一了 CRLF→LF"。

附带观察(非问题): 本 PR 将 142 个文件的版权头从「MIT + Apache 2.0 双许可」统一为「仅 Apache 2.0」,与根 LICENSE.md(纯 Apache 2.0)对齐,属一致性修正。因涉及许可文本变更,建议在 PR 描述中显式说明。

阻塞问题仅剩:UnityEngineCameraExtension / UnityEngineRendererExtension 裁剪保根(问题 3)与 PR 描述补全(问题 2)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants