GeWuYou a79f02c987 docs(api): 添加 Core API 参考文档与事件系统接口文档
- 新增 Core API 参考文档,涵盖架构与模块、数据模型与系统、命令与查询等核心组件
- 添加事件系统接口详细文档,包括 IEvent、IEventBus、IUnRegister 等接口说明
- 提供完整的 API 使用示例路径、最佳实践与性能建议
- 包含架构图、依赖关系图与故障排查指南
- 添加测试用例参考与扩展方法说明
- [skip ci]
2026-01-21 23:45:10 +08:00

544 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# API参考文档
<cite>
**本文档引用的文件**
- [GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj)
- [GFramework.Core.Abstractions.csproj](file://GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj)
- [GFramework.Game.csproj](file://GFramework.Game/GFramework.Game.csproj)
- [GFramework.Game.Abstractions.csproj](file://GFramework.Game.Abstractions/GFramework.Game.Abstractions.csproj)
- [GFramework.Godot.csproj](file://GFramework.Godot/GFramework.Godot.csproj)
- [GFramework.Godot.SourceGenerators.csproj](file://GFramework.Godot.SourceGenerators/GFramework.Godot.SourceGenerators.csproj)
- [GFramework.SourceGenerators.csproj](file://GFramework.SourceGenerators/GFramework.SourceGenerators.csproj)
- [GFramework.SourceGenerators.Abstractions.csproj](file://GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj)
- [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs)
- [ICommand.cs](file://GFramework.Core.Abstractions/command/ICommand.cs)
- [IQuery.cs](file://GFramework.Core.Abstractions/query/IQuery.cs)
- [IEvent.cs](file://GFramework.Core.Abstractions/events/IEvent.cs)
- [ISystem.cs](file://GFramework.Core.Abstractions/system/ISystem.cs)
- [IModel.cs](file://GFramework.Core.Abstractions/model/IModel.cs)
- [IState.cs](file://GFramework.Core.Abstractions/state/IState.cs)
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
GFramework是一个基于.NET平台的游戏开发框架专为Godot引擎设计。该框架提供了完整的架构模式实现包括命令-查询职责分离(CQRS)、事件总线、依赖注入、状态机等核心功能。框架采用模块化设计,支持多目标框架(.NET 8.0、9.0、10.0),并通过源代码生成器提供编译时优化。
## 项目结构
GFramework采用分层模块化架构主要包含以下核心模块
```mermaid
graph TB
subgraph "核心层"
Core[GFramework.Core]
CoreAbst[GFramework.Core.Abstractions]
end
subgraph "游戏层"
Game[GFramework.Game]
GameAbst[GFramework.Game.Abstractions]
end
subgraph "Godot集成层"
Godot[GFramework.Godot]
GodotGen[GFramework.Godot.SourceGenerators]
end
subgraph "源代码生成器层"
SrcGen[GFramework.SourceGenerators]
SrcGenAbst[GFramework.SourceGenerators.Abstractions]
SrcGenCommon[GFramework.SourceGenerators.Common]
end
CoreAbst --> Core
GameAbst --> Game
Game --> Core
Godot --> Game
GodotGen --> SrcGen
SrcGen --> SrcGenAbst
SrcGen --> SrcGenCommon
```
**图表来源**
- [GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj#L1-L13)
- [GFramework.Game.csproj](file://GFramework.Game/GFramework.Game.csproj#L1-L17)
- [GFramework.Godot.csproj](file://GFramework.Godot/GFramework.Godot.csproj#L1-L22)
**章节来源**
- [GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj#L1-L13)
- [GFramework.Core.Abstractions.csproj](file://GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj#L1-L29)
- [GFramework.Game.csproj](file://GFramework.Game/GFramework.Game.csproj#L1-L17)
- [GFramework.Game.Abstractions.csproj](file://GFramework.Game.Abstractions/GFramework.Game.Abstractions.csproj#L1-L31)
## 核心组件
GFramework的核心组件遵循清晰的接口分离原则每个组件都有明确的职责边界
### 架构接口体系
IArchitecture接口定义了整个框架的架构管理能力包括系统、模型、工具的注册和获取以及模块安装和生命周期钩子注册。
### 命令查询事件模式
框架实现了完整的CQRS模式提供ICommand、IQuery、IEvent接口支持同步和异步操作以及带返回值的命令模式。
### 依赖注入容器
IIocContainer接口提供了完整的依赖注入功能支持单例、多实例、系统实例等多种注册方式以及类型安全的解析操作。
**章节来源**
- [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L1-L68)
- [ICommand.cs](file://GFramework.Core.Abstractions/command/ICommand.cs#L1-L31)
- [IQuery.cs](file://GFramework.Core.Abstractions/query/IQuery.cs#L1-L16)
- [IEvent.cs](file://GFramework.Core.Abstractions/events/IEvent.cs#L1-L16)
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L1-L116)
## 架构概览
GFramework采用分层架构设计每层都有明确的职责分工
```mermaid
graph TD
subgraph "表现层"
UI[用户界面]
Controllers[控制器]
end
subgraph "应用层"
Commands[命令处理]
Queries[查询处理]
Events[事件系统]
end
subgraph "领域层"
Models[模型数据]
StateMachines[状态机]
Utilities[工具类]
end
subgraph "基础设施层"
IoC[依赖注入]
Storage[存储系统]
Logging[日志系统]
end
UI --> Controllers
Controllers --> Commands
Controllers --> Queries
Commands --> Models
Queries --> Models
Events --> Controllers
Models --> StateMachines
StateMachines --> Utilities
Utilities --> IoC
IoC --> Storage
IoC --> Logging
```
**图表来源**
- [ISystem.cs](file://GFramework.Core.Abstractions/system/ISystem.cs#L1-L11)
- [IModel.cs](file://GFramework.Core.Abstractions/model/IModel.cs#L1-L10)
- [IState.cs](file://GFramework.Core.Abstractions/state/IState.cs#L1-L26)
## 详细组件分析
### Core API模块
#### IArchitecture接口详解
IArchitecture接口是整个框架的核心负责管理架构的生命周期和组件注册。
```mermaid
classDiagram
class IArchitecture {
<<interface>>
+IArchitectureContext Context
+void Initialize()
+void Destroy()
+T RegisterSystem~T~(T system)
+T RegisterModel~T~(T model)
+T RegisterUtility~T~(T utility)
+IArchitectureModule InstallModule(IArchitectureModule module)
+IArchitectureLifecycle RegisterLifecycleHook(IArchitectureLifecycle hook)
}
class ISystem {
<<interface>>
+Execute()
}
class IModel {
<<interface>>
+Initialize()
}
class IUtility {
<<interface>>
+Execute()
}
IArchitecture --> ISystem : "注册系统"
IArchitecture --> IModel : "注册模型"
IArchitecture --> IUtility : "注册工具"
```
**图表来源**
- [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68)
**方法签名与行为**
- Initialize(): 初始化架构组件,建立基础服务
- Destroy(): 清理架构资源,释放所有已注册组件
- RegisterSystem<T>(): 注册系统实例,支持泛型约束
- RegisterModel<T>(): 注册模型实例,提供数据管理能力
- RegisterUtility<T>(): 注册工具实例,提供辅助功能
- InstallModule(): 安装架构模块,扩展框架功能
- RegisterLifecycleHook(): 注册生命周期钩子,监听架构状态变化
**异常处理**
- 架构销毁后继续操作会抛出InvalidOperationException
- 重复注册同一类型的服务会抛出InvalidOperationException
**使用示例路径**
- [架构初始化示例](file://GFramework.Core.Tests/architecture/ArchitectureContextTests.cs)
- [系统注册示例](file://GFramework.Core.Tests/system/TestSystem.cs)
**章节来源**
- [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L1-L68)
#### IIocContainer接口详解
IIocContainer提供了完整的依赖注入功能支持多种注册和解析模式。
```mermaid
classDiagram
class IIocContainer {
<<interface>>
+void RegisterSingleton~T~(T instance)
+void RegisterPlurality(object instance)
+void RegisterSystem(ISystem system)
+void Register~T~(T instance)
+void Register(Type type, object instance)
+T? Get~T~() where T : class
+T GetRequired~T~() where T : class
+IReadOnlyList~T~ GetAll~T~() where T : class
+IReadOnlyList~T~ GetAllSorted~T~(Comparison~T~ comparison)
+bool Contains~T~()
+bool ContainsInstance(object instance)
+void Clear()
+void Freeze()
}
class ISystem {
<<interface>>
+Execute()
}
IIocContainer --> ISystem : "注册系统"
IIocContainer --> IIocContainer : "支持多实例"
```
**图表来源**
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L11-L116)
**注册方法**
- RegisterSingleton<T>(): 单例注册,确保全局唯一实例
- RegisterPlurality(): 多接口注册,自动绑定到所有实现接口
- RegisterSystem(): 系统实例注册,特殊处理系统类型
- Register<T>(): 标准实例注册,支持泛型类型
**解析方法**
- Get<T>(): 安全获取不存在返回null
- GetRequired<T>(): 必需获取,不存在抛出异常
- GetAll<T>(): 获取所有实例,推荐用于接口/抽象类
- GetAllSorted<T>(): 获取并排序,系统调度专用
**实用方法**
- Contains<T>(): 类型检查,验证实例是否存在
- ContainsInstance(): 实例检查,验证具体实例
- Clear(): 清空容器,重置所有注册
- Freeze(): 冻结容器,防止后续修改
**使用示例路径**
- [依赖注入测试示例](file://GFramework.Core.Tests/ioc/IocContainerTests.cs)
- [系统注册示例](file://GFramework.Core.Tests/system/AsyncTestSystem.cs)
**章节来源**
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L1-L116)
### Game API模块
#### 命令系统接口
命令系统实现了CQRS模式提供统一的命令处理机制。
```mermaid
classDiagram
class ICommand {
<<interface>>
+Execute()
}
class ICommand~TResult~ {
<<interface>>
+TResult Execute()
}
class IContextAware {
<<interface>>
+GetArchitecture()
}
ICommand --|> IContextAware
ICommand~TResult~ --|> IContextAware
note for ICommand "无返回值命令"
note for ICommand~TResult~ "带返回值命令"
```
**图表来源**
- [ICommand.cs](file://GFramework.Core.Abstractions/command/ICommand.cs#L9-L31)
**接口特性**
- 继承IContextAware可访问架构上下文
- 支持泛型返回值,提供类型安全的结果
- 简化的执行接口,专注于业务逻辑
**使用场景**
- 用户输入处理
- 游戏状态变更
- 数据持久化操作
**章节来源**
- [ICommand.cs](file://GFramework.Core.Abstractions/command/ICommand.cs#L1-L31)
#### 查询系统接口
查询系统提供数据检索能力,支持复杂查询操作。
```mermaid
classDiagram
class IQuery~TResult~ {
<<interface>>
+TResult Do()
}
class IContextAware {
<<interface>>
+GetArchitecture()
}
IQuery~TResult~ --|> IContextAware
note for IQuery~TResult~ "查询接口<br/>执行后返回结果"
```
**图表来源**
- [IQuery.cs](file://GFramework.Core.Abstractions/query/IQuery.cs#L9-L16)
**接口特性**
- 泛型结果类型,提供强类型查询
- Do()方法执行查询操作
- 继承上下文感知能力
**使用场景**
- 数据检索
- 状态查询
- 统计信息获取
**章节来源**
- [IQuery.cs](file://GFramework.Core.Abstractions/query/IQuery.cs#L1-L16)
### Godot API模块
#### 状态机接口
状态机接口定义了状态转换的核心逻辑。
```mermaid
classDiagram
class IState {
<<interface>>
+OnEnter(IState from)
+OnExit(IState to)
+bool CanTransitionTo(IState target)
}
class IStateMachine {
<<interface>>
+ChangeState(IState state)
+GetCurrentState() IState
+CanTransitionTo(IState state) bool
}
IStateMachine --> IState : "管理状态"
note for IState "状态基接口"
note for IStateMachine "状态机管理接口"
```
**图表来源**
- [IState.cs](file://GFramework.Core.Abstractions/state/IState.cs#L6-L26)
**方法说明**
- OnEnter(): 状态进入时调用,支持从其他状态转换
- OnExit(): 状态退出时调用,支持转换到新状态
- CanTransitionTo(): 判断状态转换可行性
**状态机特性**
- 支持null参数处理初始和结束状态
- 提供转换验证机制
- 灵活的状态管理
**章节来源**
- [IState.cs](file://GFramework.Core.Abstractions/state/IState.cs#L1-L26)
### Source Generators API模块
#### 源代码生成器接口
源代码生成器提供编译时代码生成能力,提升运行时性能。
```mermaid
classDiagram
class IContextAwareAttribute {
<<attribute>>
+Target Type
}
class LogAttribute {
<<attribute>>
+LogLevel Level
}
class GenerateEnumExtensionsAttribute {
<<attribute>>
+EnumType Type
}
class ContextAwareDiagnostic {
<<class>>
+ReportDiagnostic()
}
class LoggerGenerator {
<<class>>
+Execute()
}
IContextAwareAttribute --> ContextAwareDiagnostic : "诊断"
LogAttribute --> LoggerGenerator : "生成"
GenerateEnumExtensionsAttribute --> LoggerGenerator : "生成"
```
**图表来源**
- [ContextAwareAttribute.cs](file://GFramework.SourceGenerators.Abstractions/rule/ContextAwareAttribute.cs)
- [LogAttribute.cs](file://GFramework.SourceGenerators.Abstractions/logging/LogAttribute.cs)
- [EnumExtensionsGenerator.cs](file://GFramework.SourceGenerators/enums/EnumExtensionsGenerator.cs)
**生成器类型**
- ContextAwareGenerator: 上下文感知代码生成
- LoggerGenerator: 日志器代码生成
- EnumExtensionsGenerator: 枚举扩展方法生成
**诊断系统**
- ContextAwareDiagnostic: 上下文感知诊断
- LoggerDiagnostic: 日志器诊断
**章节来源**
- [ContextAwareAttribute.cs](file://GFramework.SourceGenerators.Abstractions/rule/ContextAwareAttribute.cs)
- [LogAttribute.cs](file://GFramework.SourceGenerators.Abstractions/logging/LogAttribute.cs)
- [EnumExtensionsGenerator.cs](file://GFramework.SourceGenerators/enums/EnumExtensionsGenerator.cs)
## 依赖分析
```mermaid
graph LR
subgraph "核心抽象层"
CoreAbst[GFramework.Core.Abstractions]
end
subgraph "核心实现层"
Core[GFramework.Core]
CoreTests[GFramework.Core.Tests]
end
subgraph "游戏抽象层"
GameAbst[GFramework.Game.Abstractions]
end
subgraph "游戏实现层"
Game[GFramework.Game]
GameTests[GFramework.Game.Tests]
end
subgraph "Godot层"
Godot[GFramework.Godot]
GodotGen[GFramework.Godot.SourceGenerators]
end
subgraph "源代码生成器层"
SrcGen[GFramework.SourceGenerators]
SrcGenAbst[GFramework.SourceGenerators.Abstractions]
SrcGenCommon[GFramework.SourceGenerators.Common]
end
CoreAbst --> Core
Core --> CoreTests
GameAbst --> Game
Game --> GameTests
Godot --> Game
GodotGen --> SrcGen
SrcGen --> SrcGenAbst
SrcGen --> SrcGenCommon
```
**图表来源**
- [GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj#L9-L11)
- [GFramework.Game.csproj](file://GFramework.Game/GFramework.Game.csproj#L9-L12)
- [GFramework.Godot.csproj](file://GFramework.Godot/GFramework.Godot.csproj#L16-L20)
**依赖关系特点**
- 采用单向依赖,避免循环引用
- 抽象层独立于实现层
- 源代码生成器独立部署
- 测试项目独立于核心项目
**章节来源**
- [GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj#L1-L13)
- [GFramework.Game.csproj](file://GFramework.Game/GFramework.Game.csproj#L1-L17)
- [GFramework.Godot.csproj](file://GFramework.Godot/GFramework.Godot.csproj#L1-L22)
## 性能考虑
### 内存管理
- 使用RegisterSingleton进行单例注册减少内存分配
- 通过Freeze()冻结IoC容器防止后续修改操作
- 合理使用GetAll()获取多个实例,避免重复解析
### 并发安全
- 架构初始化和销毁操作需要线程安全
- 事件注册和注销需要原子性操作
- 状态机转换需要互斥保护
### 编译时优化
- 源代码生成器在编译时生成优化代码
- 减少运行时反射调用
- 提供类型安全的API
## 故障排除指南
### 常见问题及解决方案
**架构未初始化错误**
- 症状:调用架构方法时报错
- 解决方案确保先调用Initialize()再使用架构功能
**依赖注入解析失败**
- 症状GetRequired<T>()抛出异常
- 解决方案检查Register<T>()是否正确调用,确认实例已注册
**状态机转换异常**
- 症状CanTransitionTo()返回false
- 解决方案:检查状态转换逻辑,确保目标状态有效
**源代码生成器问题**
- 症状:生成的代码不完整
- 解决方案:检查生成器配置,确认依赖项正确安装
**章节来源**
- [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L69-L70)
## 结论
GFramework提供了一个完整、类型安全、高性能的游戏开发框架。通过清晰的接口分离、模块化设计和编译时优化开发者可以构建可维护、可扩展的游戏应用。框架支持多目标框架具有良好的向后兼容性并通过源代码生成器提供额外的性能优势。
## 附录
### 版本兼容性
- 支持.NET 8.0、9.0、10.0
- Godot 4.5.1集成
- 源代码生成器基于.NET Standard 2.0
### 命名约定
- 接口以"I"开头如IArchitecture
- 抽象类以"Abstract"开头如AbstractSystem
- 实现类以具体名称如CommandBus
- 属性使用PascalCase命名
### 设计模式
- 依赖注入模式通过IIocContainer实现
- 命令查询职责分离通过ICommand和IQuery实现
- 观察者模式通过IEvent实现
- 状态模式通过IState实现
- 工厂模式:通过各种工厂接口实现
### 最佳实践
- 优先使用接口编程而非具体实现
- 合理使用单例模式管理全局状态
- 通过事件系统实现松耦合通信
- 使用状态机管理复杂的游戏状态
- 利用源代码生成器提升性能