mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-13 06:04:30 +08:00
- 修复 NotificationLifetimeBenchmarks 的 scoped 容器释放与公开 XML 契约缺口 - 修复 generated descriptor 预热阶段先去重后校验导致的有效后继条目丢失问题 - 更新 generated descriptor 的 MethodInfo 比较方式并补充 request/stream 回归测试 - 同步 cqrs-rewrite active tracking 与 trace 的当前 PR 锚点到 PR #348
7.9 KiB
7.9 KiB
CQRS 重写迁移跟踪
目标
围绕 GFramework 当前的双轨 CQRS 现状,继续完成以“去外部依赖、降低反射、收口公开入口”为目标的
CQRS 迁移与收敛。
当前恢复点
- 恢复点编号:
CQRS-REWRITE-RP-134 - 当前阶段:
Phase 8 - 当前 PR 锚点:
PR #348 - 当前结论:
- 本轮按
$gframework-batch-boot协调多波 non-conflicting subagent,基线固定为origin/main @ 3b2e6899d5ffdcfb634b28f3846f57528fbf9196 (2026-05-11T12:25:00+08:00)。 - 本轮停止继续扩 batch 的主信号是
reviewability / context-budget,不是50文件阈值; 自然停点时累计 branch diff 约为12 files,仍明显低于阈值。 - CQRS runtime / tests 侧已补齐并提交:
CqrsNotificationPublisherTests锁定“多 publisher 报错”与“单 dispatcher 内 publisher 缓存复用”CqrsGeneratedRequestInvokerProviderTests与CqrsHandlerRegistrar收口 generated descriptor 的异常枚举、 坏元数据与重复 pair 回退契约CqrsDispatcherCacheTests锁定 request / stream pipeline presence、executor cache 与上下文重新注入组合分支
- benchmark 侧已补齐并提交:
RequestStartupBenchmarks的Mediatorstartup 对照StreamStartupBenchmarksNotificationStartupBenchmarksGFramework.Cqrs.Benchmarks/README.md的 current coverage / gap 收口
- 文档与恢复入口侧已补齐并提交:
GFramework.Cqrs/README.mddocs/zh-CN/core/cqrs.mddocs/zh-CN/source-generators/cqrs-handler-registry-generator.mdai-plan/public/cqrs-rewrite/archive/**顶部导航与跳转约定
- 当前
PR #348latest-head review 再次复核后:- 跳过
NotificationLifetimeBenchmarks.HandlerLifetime的[GenerateEnumExtensions]建议,原因是仓库没有“所有枚举统一生成扩展”的约定,且 benchmark 局部枚举不在该能力的强制范围内 - 接受并修复
NotificationLifetimeBenchmarks的 scoped 容器释放与公开 XML 文档缺口 - 接受并修复
CqrsHandlerRegistrar对 generated descriptor 的“先去重后校验”缺陷,并补回归测试锁定“首条无效、后条有效”的同键场景 - 接受并修复 generated descriptor 校验对
MethodInfo使用ReferenceEquals的过严比较,改为按方法语义等价匹配
- 跳过
- 当前尚未提交的收尾切片仅剩:
GFramework.Cqrs.Benchmarks/Messaging/NotificationLifetimeBenchmarks.csGFramework.Cqrs.Tests/Cqrs/CqrsRegistrationServiceTests.csGFramework.Cqrs/README.mddocs/zh-CN/core/command.mddocs/zh-CN/core/query.md- 本 tracking / trace 文件本身
- 本轮按
当前活跃事实
- 当前分支:
feat/cqrs-optimization - 当前 PR:
PR #348 - 当前写面:
GFramework.Cqrs.Benchmarks/README.mdGFramework.Cqrs.Benchmarks/Messaging/NotificationLifetimeBenchmarks.csGFramework.Cqrs.Benchmarks/Messaging/NotificationStartupBenchmarks.csGFramework.Cqrs.Benchmarks/Messaging/RequestStartupBenchmarks.csGFramework.Cqrs.Benchmarks/Messaging/StreamStartupBenchmarks.csGFramework.Cqrs.Tests/Cqrs/CqrsDispatcherCacheTests.csGFramework.Cqrs.Tests/Cqrs/CqrsGeneratedRequestInvokerProviderTests.csGFramework.Cqrs.Tests/Cqrs/CqrsNotificationPublisherTests.csGFramework.Cqrs.Tests/Cqrs/CqrsRegistrationServiceTests.csGFramework.Cqrs/Internal/CqrsHandlerRegistrar.csGFramework.Cqrs/README.mdai-plan/public/cqrs-rewrite/todos/cqrs-rewrite-migration-tracking.mdai-plan/public/cqrs-rewrite/traces/cqrs-rewrite-migration-trace.mdai-plan/public/cqrs-rewrite/archive/todos/cqrs-rewrite-migration-tracking-history-through-rp131.mdai-plan/public/cqrs-rewrite/archive/traces/cqrs-rewrite-migration-trace-history-through-rp131.mddocs/zh-CN/core/command.mddocs/zh-CN/core/cqrs.mddocs/zh-CN/core/query.mddocs/zh-CN/source-generators/cqrs-handler-registry-generator.md
- 当前基线:
- 本轮 batch 启动前,分支相对基线的累计 diff 为
0 files / 0 lines - 当前自然停点时,累计 diff 约为
12 files - 本轮新增 benchmark smoke 结果:
RequestStartupBenchmarksColdStart_GFrameworkCqrs 61.648 us / 25336 BColdStart_Mediator 110.867 us / 57872 BColdStart_MediatR 679.103 us / 606256 B
StreamStartupBenchmarksColdStart_GFrameworkReflection 71.13 us / 25504 BColdStart_GFrameworkGenerated 82.12 us / 28280 BColdStart_MediatR 933.87 us / 678992 B
NotificationStartupBenchmarksColdStart_GFrameworkCqrs 85.09 us / 24752 BColdStart_Mediator 136.08 us / 62512 BColdStart_MediatR 1.379 ms / 719056 B
- 本轮 batch 启动前,分支相对基线的累计 diff 为
当前风险
NotificationLifetimeBenchmarks当前已跑完整默认作业,但还没并入提交;若继续新开 batch,未提交面会明显降低可审查性。RequestStartup的提交8990749d连带带入了CqrsDispatcherCacheTests.cs;虽然两条切片均有效且已验证通过,但提交边界不再严格对应单个 ownership slice。- startup 与 lifetime benchmark 的默认作业结果已足以证明路径与相对量级,但
Initialization_*与少量 short-run 结果仍不应直接当成稳定排序结论。
最近权威验证
dotnet build GFramework.Cqrs.Benchmarks/GFramework.Cqrs.Benchmarks.csproj -c Release- 结果:通过,
0 warning / 0 error
- 结果:通过,
dotnet build GFramework.Cqrs/GFramework.Cqrs.csproj -c Release- 结果:通过,
0 warning / 0 error
- 结果:通过,
dotnet build GFramework.Core/GFramework.Core.csproj -c Release- 结果:通过,
0 warning / 0 error
- 结果:通过,
dotnet test GFramework.Cqrs.Tests/GFramework.Cqrs.Tests.csproj -c Release --filter "FullyQualifiedName~CqrsRegistrationServiceTests"- 结果:通过,
Passed: 4, Failed: 0
- 结果:通过,
dotnet run --project GFramework.Cqrs.Benchmarks/GFramework.Cqrs.Benchmarks.csproj -c Release --no-build -- --artifacts-suffix pr347-req-scoped --filter "*RequestLifetimeBenchmarks.SendRequest_GFrameworkCqrs*" --job short --warmupCount 1 --iterationCount 1 --launchCount 1- 结果:通过
- 备注:
Singleton 52.69 ns / 32 B、Transient 57.88 ns / 56 B、Scoped 144.72 ns / 368 B
dotnet run --project GFramework.Cqrs.Benchmarks/GFramework.Cqrs.Benchmarks.csproj -c Release --no-build -- --artifacts-suffix pr347-stream-scoped --filter "*StreamLifetimeBenchmarks.Stream_GFramework*" --job short --warmupCount 1 --iterationCount 1 --launchCount 1- 结果:通过
- 备注:
Scoped + FirstItem约为266.7~267.0 ns / 792 B,Scoped + DrainAll约为331.6~332.2 ns / 856 B
下一推荐步骤
- 先提交当前未提交的
NotificationLifetime + registration fallback tests + CQRS/legacy docs收尾切片,回收工作树到干净状态。 - 再次运行
$gframework-pr-review,复核PR #348latest-head open thread 是否已随着本轮多波 head 收敛。 - 若继续扩 benchmark,优先从
GFramework.Cqrs.Benchmarks/README.md已明确列出的 gap 中选下一个单文件切片,而不是继续扩大 shared infra 改动面。
活跃文档
- 当前 active tracking:
ai-plan/public/cqrs-rewrite/todos/cqrs-rewrite-migration-tracking.md - 当前 active trace:
ai-plan/public/cqrs-rewrite/traces/cqrs-rewrite-migration-trace.md - 当前历史归档:
ai-plan/public/cqrs-rewrite/archive/todos/cqrs-rewrite-migration-tracking-history-through-rp131.mdai-plan/public/cqrs-rewrite/archive/traces/cqrs-rewrite-migration-trace-history-through-rp131.md
说明
RP-131及之前的长历史验证、阶段流水与旧恢复点说明已迁移到新的archive/文件,不再继续堆叠在 active 入口。- active tracking 现在只保留当前恢复点所需的最小事实、风险、权威验证与下一步,供
boot与后续 PR review 快速恢复。