# API参考文档 **本文档引用的文件** - [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) ## 目录 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 { <> +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 { <> +Execute() } class IModel { <> +Initialize() } class IUtility { <> +Execute() } IArchitecture --> ISystem : "注册系统" IArchitecture --> IModel : "注册模型" IArchitecture --> IUtility : "注册工具" ``` **图表来源** - [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68) **方法签名与行为**: - Initialize(): 初始化架构组件,建立基础服务 - Destroy(): 清理架构资源,释放所有已注册组件 - RegisterSystem(): 注册系统实例,支持泛型约束 - RegisterModel(): 注册模型实例,提供数据管理能力 - RegisterUtility(): 注册工具实例,提供辅助功能 - 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 { <> +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 { <> +Execute() } IIocContainer --> ISystem : "注册系统" IIocContainer --> IIocContainer : "支持多实例" ``` **图表来源** - [IIocContainer.cs](file://GFramework.Core.Abstractions/ioc/IIocContainer.cs#L11-L116) **注册方法**: - RegisterSingleton(): 单例注册,确保全局唯一实例 - RegisterPlurality(): 多接口注册,自动绑定到所有实现接口 - RegisterSystem(): 系统实例注册,特殊处理系统类型 - Register(): 标准实例注册,支持泛型类型 **解析方法**: - Get(): 安全获取,不存在返回null - GetRequired(): 必需获取,不存在抛出异常 - GetAll(): 获取所有实例,推荐用于接口/抽象类 - GetAllSorted(): 获取并排序,系统调度专用 **实用方法**: - Contains(): 类型检查,验证实例是否存在 - 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 { <> +Execute() } class ICommand~TResult~ { <> +TResult Execute() } class IContextAware { <> +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~ { <> +TResult Do() } class IContextAware { <> +GetArchitecture() } IQuery~TResult~ --|> IContextAware note for IQuery~TResult~ "查询接口
执行后返回结果" ``` **图表来源** - [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 { <> +OnEnter(IState from) +OnExit(IState to) +bool CanTransitionTo(IState target) } class IStateMachine { <> +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 { <> +Target Type } class LogAttribute { <> +LogLevel Level } class GenerateEnumExtensionsAttribute { <> +EnumType Type } class ContextAwareDiagnostic { <> +ReportDiagnostic() } class LoggerGenerator { <> +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()抛出异常 - 解决方案:检查Register()是否正确调用,确认实例已注册 **状态机转换异常**: - 症状: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实现 - 工厂模式:通过各种工厂接口实现 ### 最佳实践 - 优先使用接口编程而非具体实现 - 合理使用单例模式管理全局状态 - 通过事件系统实现松耦合通信 - 使用状态机管理复杂的游戏状态 - 利用源代码生成器提升性能