mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-06 16:16:44 +08:00
docs: 添加 CQRS 架构模式和源代码生成器完整文档
- 新增 CQRS 核心概念、命令查询处理器实现指南 - 添加请求分发器、通知发布和管道行为使用说明 - 提供流式处理、验证行为等高级特性文档 - 完善源代码生成器模块介绍和配置说明 - 包含 Log、ContextAware、EnumExtensions 等生成器详细用法 - 添加 Godot 专用生成器如 GetNode、AutoUiPage 等使用指南 - 整理诊断信息、最佳实践和常见问题解答
This commit is contained in:
parent
c7516800e7
commit
38f98ea7ea
13
CLAUDE.md
13
CLAUDE.md
@ -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: 提供代码生成能力。
|
||||||
|
|
||||||
这种结构的核心设计目标是让抽象稳定、实现可替换、引擎集成隔离、生成器能力可独立演进。
|
这种结构的核心设计目标是让抽象稳定、实现可替换、引擎集成隔离、生成器能力可独立演进。
|
||||||
|
|
||||||
|
|||||||
30
README.md
30
README.md
@ -25,15 +25,17 @@ 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.Godot.SourceGenerators` | Godot 场景下的源码生成器扩展 | [查看](GFramework.Godot.SourceGenerators/README.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) |
|
||||||
|
|
||||||
## 文档导航
|
## 文档导航
|
||||||
|
|
||||||
@ -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/
|
||||||
```
|
```
|
||||||
|
|||||||
@ -28,8 +28,8 @@ CQRS(Command 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
|
||||||
|
|||||||
@ -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 - 日志字段名冲突
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user