docs: 添加 CQRS 架构模式和源代码生成器完整文档

- 新增 CQRS 核心概念、命令查询处理器实现指南
- 添加请求分发器、通知发布和管道行为使用说明
- 提供流式处理、验证行为等高级特性文档
- 完善源代码生成器模块介绍和配置说明
- 包含 Log、ContextAware、EnumExtensions 等生成器详细用法
- 添加 Godot 专用生成器如 GetNode、AutoUiPage 等使用指南
- 整理诊断信息、最佳实践和常见问题解答
This commit is contained in:
GeWuYou 2026-04-17 16:33:29 +08:00
parent c7516800e7
commit 38f98ea7ea
4 changed files with 44 additions and 29 deletions

View File

@ -18,17 +18,22 @@ Follow them strictly.
```text ```text
GFramework (meta package) ─→ Core + Game GFramework (meta package) ─→ Core + Game
GFramework.Cqrs ─→ Cqrs.Abstractions, Core.Abstractions
GFramework.Core ─→ Core.Abstractions GFramework.Core ─→ Core.Abstractions
GFramework.Game ─→ Game.Abstractions, Core, Core.Abstractions GFramework.Game ─→ Game.Abstractions, Core, Core.Abstractions
GFramework.Godot ─→ Core, Game, Core.Abstractions, Game.Abstractions GFramework.Godot ─→ Core, Game, Core.Abstractions, Game.Abstractions
GFramework.Ecs.Arch ─→ Ecs.Arch.Abstractions, Core, Core.Abstractions GFramework.Ecs.Arch ─→ Ecs.Arch.Abstractions, Core, Core.Abstractions
GFramework.SourceGenerators ─→ SourceGenerators.Common, SourceGenerators.Abstractions GFramework.Core.SourceGenerators ─→ Core.SourceGenerators.Abstractions, SourceGenerators.Common
GFramework.Game.SourceGenerators ─→ SourceGenerators.Common
GFramework.Godot.SourceGenerators ─→ Godot.SourceGenerators.Abstractions, SourceGenerators.Common
GFramework.Cqrs.SourceGenerators ─→ SourceGenerators.Common
``` ```
- **Abstractions projects** (`netstandard2.1`): 只包含接口和契约定义,不承载运行时实现逻辑。 - **Abstractions projects** (`netstandard2.1`): 只包含接口和契约定义,不承载运行时实现逻辑。
- **Core / Game / Ecs.Arch** (`net8.0;net9.0;net10.0`): 平台无关的核心实现层。 - **Core / Game / Ecs.Arch** (`net8.0;net9.0;net10.0`): 平台无关的核心实现层。
- **Godot**: Godot 引擎集成层,负责与节点、场景和引擎生命周期对接。 - **Godot**: Godot 引擎集成层,负责与节点、场景和引擎生命周期对接。
- **SourceGenerators** (`netstandard2.1`): Roslyn 增量源码生成器及其公共基础设施。 - **SourceGenerators family** (`netstandard2.0`/`netstandard2.1`): 按 Core / Game / Godot / Cqrs 拆分的 Roslyn
增量源码生成器,以及共享的 abstractions/common 基础设施。
## Architecture Pattern ## Architecture Pattern
@ -114,10 +119,12 @@ Architecture 负责统一生命周期编排,核心阶段包括:
仓库以“抽象层 + 实现层 + 集成层 + 生成器层”的方式组织: 仓库以“抽象层 + 实现层 + 集成层 + 生成器层”的方式组织:
- `GFramework.Core.Abstractions` / `GFramework.Game.Abstractions`: 约束接口和公共契约。 - `GFramework.Core.Abstractions` / `GFramework.Game.Abstractions`: 约束接口和公共契约。
- `GFramework.Cqrs.Abstractions` / `GFramework.Cqrs`: 提供 CQRS 契约、runtime 与 handler 注册基础设施。
- `GFramework.Core` / `GFramework.Game`: 提供平台无关实现。 - `GFramework.Core` / `GFramework.Game`: 提供平台无关实现。
- `GFramework.Godot`: 提供与 Godot 运行时集成的适配实现。 - `GFramework.Godot`: 提供与 Godot 运行时集成的适配实现。
- `GFramework.Ecs.Arch`: 提供 ECS Architecture 相关扩展。 - `GFramework.Ecs.Arch`: 提供 ECS Architecture 相关扩展。
- `GFramework.SourceGenerators` 及相关 Abstractions/Common: 提供代码生成能力。 - `GFramework.Core.SourceGenerators` / `GFramework.Game.SourceGenerators` / `GFramework.Godot.SourceGenerators` /
`GFramework.Cqrs.SourceGenerators` 与相关 Abstractions/Common: 提供代码生成能力。
这种结构的核心设计目标是让抽象稳定、实现可替换、引擎集成隔离、生成器能力可独立演进。 这种结构的核心设计目标是让抽象稳定、实现可替换、引擎集成隔离、生成器能力可独立演进。

View File

@ -26,13 +26,15 @@ GFramework 采用清晰分层与模块化设计,强调:
## 功能模块 ## 功能模块
| 模块 | 说明 | 文档 | | 模块 | 说明 | 文档 |
| --- | --- | --- | |-------------------------------------------------------------------------|-----------------------------------------|---------------------------------------------------|
| `GFramework.Core` | 平台无关的核心架构能力架构、命令、查询、事件、属性、IOC、日志等 | [查看](GFramework.Core/README.md) | | `GFramework.Core` | 平台无关的核心架构能力架构、命令、查询、事件、属性、IOC、日志等 | [查看](GFramework.Core/README.md) |
| `GFramework.Core.Abstractions` | Core 对应的抽象接口定义 | [查看](GFramework.Core.Abstractions/README.md) | | `GFramework.Core.Abstractions` | Core 对应的抽象接口定义 | [查看](GFramework.Core.Abstractions/README.md) |
| `GFramework.Game` | 游戏业务侧扩展状态、配置、存储、UI 等) | [查看](GFramework.Game/README.md) | | `GFramework.Game` | 游戏业务侧扩展状态、配置、存储、UI 等) | [查看](GFramework.Game/README.md) |
| `GFramework.Game.Abstractions` | Game 模块抽象接口定义 | [查看](GFramework.Game.Abstractions/README.md) | | `GFramework.Game.Abstractions` | Game 模块抽象接口定义 | [查看](GFramework.Game.Abstractions/README.md) |
| `GFramework.Godot` | Godot 集成层(节点扩展、场景/设置/存储适配等) | [查看](GFramework.Godot/README.md) | | `GFramework.Godot` | Godot 集成层(节点扩展、场景/设置/存储适配等) | [查看](GFramework.Godot/README.md) |
| `GFramework.SourceGenerators` | 通用源码生成器(日志、枚举扩展、规则等) | [查看](GFramework.SourceGenerators/README.md) | | `GFramework.Cqrs` / `GFramework.Cqrs.Abstractions` | CQRS runtime、契约与 handler 注册基础设施 | [查看](docs/zh-CN/core/cqrs.md) |
| `GFramework.Core.SourceGenerators` | Core 侧源码生成器(日志、枚举扩展、规则、模块注册等) | [查看](GFramework.Core.SourceGenerators/README.md) |
| `GFramework.Game.SourceGenerators` / `GFramework.Cqrs.SourceGenerators` | 游戏配置 schema 与 CQRS handler registry 生成器 | [查看](docs/zh-CN/source-generators/index.md) |
| `GFramework.Godot.SourceGenerators` | Godot 场景下的源码生成器扩展 | [查看](GFramework.Godot.SourceGenerators/README.md) | | `GFramework.Godot.SourceGenerators` | Godot 场景下的源码生成器扩展 | [查看](GFramework.Godot.SourceGenerators/README.md) |
## 文档导航 ## 文档导航
@ -50,7 +52,7 @@ GFramework 采用清晰分层与模块化设计,强调:
- **`GeWuYou.GFramework`**聚合元包Meta Package用于一键引入常用能力集合适合快速试用或原型阶段。 - **`GeWuYou.GFramework`**聚合元包Meta Package用于一键引入常用能力集合适合快速试用或原型阶段。
- **`GeWuYou.GFramework.Core`**:核心起步包,适合希望按模块精细控制依赖的项目(推荐生产项目从此起步)。 - **`GeWuYou.GFramework.Core`**:核心起步包,适合希望按模块精细控制依赖的项目(推荐生产项目从此起步)。
如果你已明确技术栈建议优先按模块安装Core / Game / Godot / SourceGenerators避免不必要依赖。 如果你已明确技术栈建议优先按模块安装Core / Cqrs / Game / Godot / Source Generators避免不必要依赖。
## 快速安装 ## 快速安装
@ -105,13 +107,19 @@ dotnet add package GeWuYou.GFramework.Cqrs.SourceGenerators
```text ```text
GFramework.sln GFramework.sln
├─ GFramework.Cqrs/
├─ GFramework.Cqrs.Abstractions/
├─ GFramework.Core/ ├─ GFramework.Core/
├─ GFramework.Core.Abstractions/ ├─ GFramework.Core.Abstractions/
├─ GFramework.Core.SourceGenerators/
├─ GFramework.Core.SourceGenerators.Abstractions/
├─ GFramework.Game/ ├─ GFramework.Game/
├─ GFramework.Game.Abstractions/ ├─ GFramework.Game.Abstractions/
├─ GFramework.Game.SourceGenerators/
├─ GFramework.Godot/ ├─ GFramework.Godot/
├─ GFramework.SourceGenerators/
├─ GFramework.Godot.SourceGenerators/ ├─ GFramework.Godot.SourceGenerators/
├─ GFramework.Cqrs.SourceGenerators/
├─ GFramework.SourceGenerators.Common/
├─ docs/ ├─ docs/
└─ docfx/ └─ docfx/
``` ```

View File

@ -28,8 +28,8 @@ CQRSCommand Query Responsibility Segregation命令查询职责分离
命令表示修改系统状态的操作,如创建、更新、删除: 命令表示修改系统状态的操作,如创建、更新、删除:
```csharp ```csharp
using GFramework.Core.CQRS.Command; using GFramework.Cqrs.Command;
using GFramework.Core.Abstractions.CQRS.Command; using GFramework.Cqrs.Abstractions.Cqrs.Command;
// 定义命令输入 // 定义命令输入
public class CreatePlayerInput : ICommandInput public class CreatePlayerInput : ICommandInput
@ -50,8 +50,8 @@ public class CreatePlayerCommand : CommandBase<CreatePlayerInput, int>
查询表示读取系统状态的操作,不修改数据: 查询表示读取系统状态的操作,不修改数据:
```csharp ```csharp
using GFramework.Core.CQRS.Query; using GFramework.Cqrs.Query;
using GFramework.Core.Abstractions.CQRS.Query; using GFramework.Cqrs.Abstractions.Cqrs.Query;
// 定义查询输入 // 定义查询输入
public class GetPlayerInput : IQueryInput public class GetPlayerInput : IQueryInput
@ -71,7 +71,7 @@ public class GetPlayerQuery : QueryBase<GetPlayerInput, PlayerData>
处理器负责执行命令或查询的具体逻辑: 处理器负责执行命令或查询的具体逻辑:
```csharp ```csharp
using GFramework.Core.CQRS.Command; using GFramework.Cqrs.Cqrs.Command;
// 命令处理器 // 命令处理器
public class CreatePlayerCommandHandler : AbstractCommandHandler<CreatePlayerCommand, int> public class CreatePlayerCommandHandler : AbstractCommandHandler<CreatePlayerCommand, int>
@ -247,8 +247,8 @@ public class GameArchitecture : Architecture
handler。 handler。
`RegisterCqrsPipelineBehavior<TBehavior>()` 是唯一保留的公开入口;旧的 `Mediator` 兼容别名与扩展已移除,不再继续维护。 `RegisterCqrsPipelineBehavior<TBehavior>()` 是唯一保留的公开入口;旧的 `Mediator` 兼容别名与扩展已移除,不再继续维护。
如果你正在从旧版本迁移,显式替换关系就是 如果你正在从旧版本迁移,只需要直接改用 `RegisterCqrsPipelineBehavior<TBehavior>()`
`RegisterMediatorBehavior<TBehavior>() -> RegisterCqrsPipelineBehavior<TBehavior>()`。 `RegisterMediatorBehavior<TBehavior>()` 已移除,不再保留兼容入口
当前接口支持两种形式: 当前接口支持两种形式:
- 开放泛型行为,例如 `LoggingBehavior<,>`,用于匹配所有请求 - 开放泛型行为,例如 `LoggingBehavior<,>`,用于匹配所有请求
@ -261,8 +261,8 @@ handler。
Request 是更通用的消息类型,可以用于任何场景: Request 是更通用的消息类型,可以用于任何场景:
```csharp ```csharp
using GFramework.Core.CQRS.Request; using GFramework.Cqrs.Request;
using GFramework.Core.Abstractions.CQRS.Request; using GFramework.Cqrs.Abstractions.Cqrs.Request;
// 定义请求输入 // 定义请求输入
public class ValidatePlayerInput : IRequestInput public class ValidatePlayerInput : IRequestInput
@ -299,8 +299,8 @@ public class ValidatePlayerRequestHandler : AbstractRequestHandler<ValidatePlaye
Notification 用于一对多的消息广播: Notification 用于一对多的消息广播:
```csharp ```csharp
using GFramework.Core.CQRS.Notification; using GFramework.Cqrs.Notification;
using GFramework.Core.Abstractions.CQRS.Notification; using GFramework.Cqrs.Abstractions.Cqrs.Notification;
// 定义通知输入 // 定义通知输入
public class PlayerLevelUpInput : INotificationInput public class PlayerLevelUpInput : INotificationInput

View File

@ -1,8 +1,8 @@
# GFramework.SourceGenerators # Source Generators
> 编译时代码生成 - 零运行时开销的代码增强工具 > 编译时代码生成 - 零运行时开销的代码增强工具
GFramework.SourceGenerators 是 GFramework 框架的源代码生成器包,通过编译时分析自动生成样板代码,显著提升开发效率并减少运行时开销。 GFramework 当前按模块提供一组 Source Generators,通过编译时分析自动生成样板代码,显著提升开发效率并减少运行时开销。
## 📋 目录 ## 📋 目录
@ -30,7 +30,7 @@ GFramework.SourceGenerators 是 GFramework 框架的源代码生成器包,通
## 概述 ## 概述
GFramework 的 source generators 利用 Roslyn 源代码生成器技术,在编译时分析你的代码并自动生成常用的样板代码,让开发者专注于业务逻辑而不是重复的模板代码。 GFramework 的 Source Generators 利用 Roslyn 源代码生成器技术,在编译时分析你的代码并自动生成常用的样板代码,让开发者专注于业务逻辑而不是重复的模板代码。
当前 NuGet 发布按模块拆分为: 当前 NuGet 发布按模块拆分为:
@ -693,7 +693,7 @@ public partial class GameEntryPoint : Node
## 诊断信息 ## 诊断信息
GFramework.SourceGenerators 提供详细的编译时诊断信息,帮助开发者快速定位和解决问题。 这一组 Source Generators 提供详细的编译时诊断信息,帮助开发者快速定位和解决问题。
### GF_Logging_001 - 日志字段名冲突 ### GF_Logging_001 - 日志字段名冲突