mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-13 22:25:37 +08:00
5.0 KiB
5.0 KiB
CQRS 重写迁移跟踪
目标
围绕 GFramework 当前的双轨 CQRS 现状,完成一轮以“去 Mediator 外部依赖”为目标的架构迁移:
- 将
Mediator从 GFramework 公共 API 和运行时主路径中移除 - 基于 GFramework 自有抽象重建正式 CQRS runtime、行为管道和注册机制
- 保留
EventBus作为框架级事件系统,不与 CQRS notification 混同 - 让
CoreGrid-Migration直连本地GFramework,作为真实迁移验证工程 - 为复杂迁移建立明确恢复点与进度追踪,避免上下文过长或中断后失去状态
当前恢复点
- 恢复点编号:
CQRS-REWRITE-RP-002 - 当前阶段:
Phase 4 - 当前焦点:
- 清理剩余
Mediator包依赖与文档残留 - 评估是否继续把协程扩展和测试项目中的
Mediator.Abstractions完全移除 - 规划第二阶段优化:代码生成注册、性能收敛、行为 API 命名统一
- 清理剩余
本轮计划
Phase 0:工作流基础
- 在
local-plan/todos/建立本任务跟踪文档 - 在
local-plan/traces/建立本任务追踪文档 - 将恢复点 / trace / subagent 协作规范写入
AGENTS.md
Phase 1:本地验证链路
- 确认
CoreGrid-Migration当前引用形态 - 将
CoreGrid-Migration从 NuGet 包切到本地GFramework工程引用 - 让
CoreGrid-Migration使用本地 Source Generator 而不是外部已发布版本 - 验证本地引用链路至少能完成 restore / build
Phase 2:CQRS 基础重建
- 在
GFramework.Core.Abstractions定义自有 CQRS 契约 - 在
GFramework.Core落地 dispatcher / handler registry / behavior pipeline - 清理
IArchitectureContext中对Mediator.*的公共签名依赖 - 设计 CQRS 模块启用方式,替代
Configurator => AddMediator(...)
Phase 3:接入迁移
- 迁移
GFramework.Core.Cqrs.*基类到新契约 - 迁移
ContextAwareMediator*Extensions与协程扩展 - 迁移
CoreGrid-Migration/scripts/cqrs/**到新契约 - 删除
GameArchitecture.Configurator中的AddMediator(...)
Phase 4:收尾
- 移除
Mediator包依赖与相关测试/文档残留 - 运行目标构建与测试
- 记录剩余风险与下一恢复点
当前完成结果
CoreGrid-Migration已直连本地GFramework源码与本地 source generators。GameArchitecture已不再依赖collection.AddMediator(...)即可使用 CQRS。GFramework.Core.Abstractions新增自有 CQRS 契约:IRequest<TResponse>/INotification/IStreamRequest<TResponse>IRequestHandler<,>/INotificationHandler<>/IStreamRequestHandler<,>UnitIPipelineBehavior<,>/MessageHandlerDelegate<,>
ArchitectureBootstrapper会在初始化阶段自动扫描并注册当前架构程序集与GFramework.Core程序集中的 CQRS handlers。CqrsDispatcher已支持:- request dispatch
- notification publish
- stream dispatch
- context-aware handler 注入
- request pipeline behavior 链式执行
GFramework.Core.Tests中原依赖Mediator注册路径的测试已切换到框架内建 CQRS 注册路径。- 当前验证状态:
dotnet build GFramework/GFramework.sln通过dotnet test GFramework/GFramework.Core.Tests/GFramework.Core.Tests.csproj --no-build通过,1621个测试全部通过dotnet build CoreGrid-Migration/CoreGrid.sln通过
当前已知事实
GFramework当前仍同时维护:- 基于
CommandExecutor/QueryExecutor/EventBus的轻量旧 CQRS - 基于 GFramework 自有抽象的新 CQRS runtime
- 基于
- 仍存在
Mediator残留的区域主要集中在:- 文档中的历史说明
MediatorCoroutineExtensions及对应测试- 测试项目对
Mediator.Abstractions的少量残余依赖
CoreGrid-Migration已切到本地源码引用,并在当前恢复点完成构建验证
当前风险
GFramework仓库存在与本任务无关的既有改动,提交时必须避免覆盖CoreGrid-Migration是 worktree,WSL 下原生git解析该 worktree 路径有兼容问题- 当前
RegisterMediatorBehavior命名仍保留历史前缀,但底层已切换为框架自有 CQRS pipeline;若后续要彻底脱媒介命名,需要一次 API 命名迁移 - 当前 handler 自动注册基于运行时反射扫描;若后续追求冷启动与 AOT 友好性,需要补 source-generator 注册路径
下次恢复建议
若本轮中断,优先从以下顺序恢复:
- 查看
local-plan/traces/cqrs-rewrite-migration-trace.md - 确认当前恢复点
CQRS-REWRITE-RP-002已对应到最新提交 - 优先决定是否继续移除
Mediator.Abstractions包与MediatorCoroutineExtensions历史兼容层 - 若继续演进,再处理 CQRS 注册的生成器化与 API 命名统一
备注
- 本文档是当前任务的主恢复点,后续每个关键阶段完成后都要更新
- 发生方向调整时,不覆盖旧结论,直接追加阶段记录与新的恢复点编号