# 从零开始教程 **本文档引用的文件** - [README.md](file://README.md) - [GFramework.Core/README.md](file://GFramework.Core/README.md) - [GFramework.Core/GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj) - [GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj](file://GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj) - [GFramework.Game/README.md](file://GFramework.Game/README.md) - [GFramework.Godot/README.md](file://GFramework.Godot/README.md) - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs) - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs) - [GFramework.Core/command/AbstractCommand.cs](file://GFramework.Core/command/AbstractCommand.cs) - [GFramework.Core/query/AbstractQuery.cs](file://GFramework.Core/query/AbstractQuery.cs) - [GFramework.Core/property/BindableProperty.cs](file://GFramework.Core/property/BindableProperty.cs) - [GFramework.Core.Tests/system/TestSystem.cs](file://GFramework.Core.Tests/system/TestSystem.cs) - [GFramework.Core.Tests/model/TestModel.cs](file://GFramework.Core.Tests/model/TestModel.cs) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排除指南](#故障排除指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本教程面向希望使用GFramework从零开始创建游戏项目的开发者。GFramework是一个基于CQRS、MVC和事件驱动的轻量级游戏开发架构框架,提供与平台无关的核心模块以及针对Godot引擎的深度集成。本教程将涵盖环境准备、项目创建、架构设计、功能实现、测试验证和项目打包的完整流程。 ## 项目结构 GFramework采用模块化设计,主要包含以下核心模块: ```mermaid graph TB subgraph "核心框架" Core[GFramework.Core
平台无关核心] CoreAbstraction[GFramework.Core.Abstractions
核心接口定义] end subgraph "游戏功能" Game[GFramework.Game
游戏特定功能] GameAbstraction[GFramework.Game.Abstractions
游戏接口定义] end subgraph "平台集成" Godot[GFramework.Godot
Godot引擎集成] SourceGen[GFramework.SourceGenerators
通用源码生成器] GodotSourceGen[GFramework.Godot.SourceGenerators
Godot源码生成器] end subgraph "测试" CoreTests[GFramework.Core.Tests
核心单元测试] end Core --> CoreAbstraction Game --> GameAbstraction Godot --> Core SourceGen --> Core GodotSourceGen --> Godot CoreTests --> Core ``` **图表来源** - [GFramework.Core/GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj#L1-L13) - [GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj](file://GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj#L1-L29) **章节来源** - [README.md](file://README.md#L1-L320) - [GFramework.Core/README.md](file://GFramework.Core/README.md#L1-L508) ## 核心组件 GFramework的核心架构遵循清洁架构原则,包含五个主要层次: ### 五层架构设计 ```mermaid graph TB subgraph "UI层" UI[用户界面] end subgraph "控制层" Controller[控制器] end subgraph "逻辑层" System[系统] end subgraph "数据层" Model[模型] end subgraph "工具层" Utility[工具] end subgraph "横切关注点" Command[命令] Query[查询] Event[事件] end UI --> Controller Controller --> Command Controller --> Query Command --> System Query --> Model System --> Model Model --> Event Event --> Controller Event --> System Event --> Model Utility -.-> Controller Utility -.-> System Utility -.-> Model ``` **图表来源** - [GFramework.Core/README.md](file://GFramework.Core/README.md#L42-L108) ### 架构阶段管理 GFramework采用阶段化的生命周期管理模式: ```mermaid stateDiagram-v2 [*] --> 初始化 初始化 --> BeforeUtilityInit BeforeUtilityInit --> AfterUtilityInit AfterUtilityInit --> BeforeModelInit BeforeModelInit --> AfterModelInit AfterModelInit --> BeforeSystemInit BeforeSystemInit --> AfterSystemInit AfterSystemInit --> 就绪 就绪 --> 销毁中 销毁中 --> 已销毁 已销毁 --> [*] note right of 初始化 架构创建和基础环境初始化 end note note right of 就绪 所有组件初始化完成 end note note right of 销毁中 开始清理资源 end note ``` **图表来源** - [GFramework.Core/README.md](file://GFramework.Core/README.md#L66-L71) **章节来源** - [GFramework.Core/README.md](file://GFramework.Core/README.md#L40-L108) ## 架构概览 GFramework的核心架构由Architecture基类提供统一的组件管理能力,支持模块化扩展和生命周期管理。 ### 架构初始化流程 ```mermaid sequenceDiagram participant Dev as 开发者 participant Arch as Architecture participant Container as IoC容器 participant Utils as 工具组件 participant Models as 模型组件 participant Systems as 系统组件 Dev->>Arch : 创建架构实例 Dev->>Arch : Initialize() Arch->>Arch : Init() (用户自定义) Arch->>Container : 注册组件 Arch->>Utils : 初始化工具组件 Utils-->>Arch : 工具初始化完成 Arch->>Models : 初始化模型组件 Models-->>Arch : 模型初始化完成 Arch->>Systems : 初始化系统组件 Systems-->>Arch : 系统初始化完成 Arch->>Container : 冻结容器 Arch-->>Dev : 架构就绪 ``` **图表来源** - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L526-L566) ### 组件注册机制 架构提供统一的组件注册接口,支持系统、模型和工具的注册管理: ```mermaid classDiagram class Architecture { +RegisterSystem(system) +RegisterModel(model) +RegisterUtility(utility) +InstallModule(module) +Initialize() +Destroy() -RegisterLifecycleComponent(component) -ValidateRegistration(componentType) } class ISystem { <> +Init() +Destroy() +SetContext(context) } class IModel { <> +Init() +SetContext(context) } class IUtility { <> +SetContext(context) } Architecture --> ISystem : 注册 Architecture --> IModel : 注册 Architecture --> IUtility : 注册 Architecture --> IIocContainer : 使用 ``` **图表来源** - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L416-L483) **章节来源** - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569) ## 详细组件分析 ### 模型层 (Model) 模型层负责存储和管理游戏状态,采用响应式编程设计。 #### 模型基类设计 ```mermaid classDiagram class AbstractModel { <> +Context : IArchitectureContext +OnArchitecturePhase(phase) #OnInit() } class IModel { <> +Init() +SetContext(context) } class ContextAwareBase { <> +Context : IArchitectureContext +GetModel~T~() +GetSystem~T~() +GetUtility~T~() +SendEvent(event) +RegisterEvent~T~() } AbstractModel --|> ContextAwareBase AbstractModel ..|> IModel ContextAwareBase --> IArchitectureContext : 使用 ``` **图表来源** - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34) #### 响应式属性系统 可绑定属性提供自动化的数据变化通知机制: ```mermaid flowchart TD SetValue[设置属性值] --> Compare[比较新旧值] Compare --> Equal{值相同?} Equal --> |是| End[结束] Equal --> |否| Update[更新内部值] Update --> Trigger[触发回调事件] Trigger --> End subgraph "事件注册" Register[注册回调] RegisterWithInitValue[注册并立即调用] UnRegister[取消注册] end Register --> Callback[存储回调] RegisterWithInitValue --> Immediate[立即调用回调] Immediate --> Callback UnRegister --> Remove[移除回调] ``` **图表来源** - [GFramework.Core/property/BindableProperty.cs](file://GFramework.Core/property/BindableProperty.cs#L24-L87) **章节来源** - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L1-L34) - [GFramework.Core/property/BindableProperty.cs](file://GFramework.Core/property/BindableProperty.cs#L1-L135) ### 系统层 (System) 系统层处理业务逻辑,通过事件驱动实现组件间的松耦合通信。 #### 系统生命周期管理 ```mermaid sequenceDiagram participant Sys as System participant Logger as 日志系统 participant Events as 事件系统 Sys->>Logger : 初始化日志记录器 Sys->>Sys : OnInit() Sys->>Events : 注册事件监听 Sys-->>Logger : 系统初始化完成 Note over Sys : 运行时 Sys->>Events : 处理事件 Sys->>Sys : 更新业务状态 Sys->>Logger : 开始销毁 Sys->>Sys : OnDestroy() Sys-->>Logger : 系统销毁完成 ``` **图表来源** - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L20-L41) **章节来源** - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L1-L62) ### 命令查询模式 (Command & Query) GFramework采用CQRS模式分离读写操作,提供类型安全的命令和查询机制。 #### 命令执行流程 ```mermaid flowchart TD Start[开始执行命令] --> Validate[验证命令输入] Validate --> InputValid{输入有效?} InputValid --> |否| Error[返回错误] InputValid --> |是| GetModels[获取所需模型] GetModels --> ExecuteLogic[执行业务逻辑] ExecuteLogic --> UpdateModels[更新模型状态] UpdateModels --> SendEvents[发送相关事件] SendEvents --> Complete[执行完成] Error --> Complete ``` **图表来源** - [GFramework.Core/command/AbstractCommand.cs](file://GFramework.Core/command/AbstractCommand.cs#L17-L26) #### 查询执行流程 ```mermaid flowchart TD QueryStart[开始执行查询] --> ValidateQuery[验证查询输入] ValidateQuery --> InputValid{输入有效?} InputValid --> |否| QueryError[返回默认值] InputValid --> |是| GetModels[获取所需模型] GetModels --> ExecuteQuery[执行查询逻辑] ExecuteQuery --> ReturnResult[返回查询结果] QueryError --> End[结束] ReturnResult --> End ``` **图表来源** - [GFramework.Core/query/AbstractQuery.cs](file://GFramework.Core/query/AbstractQuery.cs#L18-L28) **章节来源** - [GFramework.Core/command/AbstractCommand.cs](file://GFramework.Core/command/AbstractCommand.cs#L1-L53) - [GFramework.Core/query/AbstractQuery.cs](file://GFramework.Core/query/AbstractQuery.cs#L1-L29) ### 控制器层 (Controller) 控制器作为UI和业务逻辑之间的桥梁,负责处理用户输入和协调组件交互。 #### 控制器设计模式 ```mermaid classDiagram class IController { <> +Initialize() +Cleanup() } class ContextAwareBase { +Context : IArchitectureContext +GetModel~T~() +GetSystem~T~() +GetUtility~T~() +SendEvent(event) +RegisterEvent~T~() } class IController { <> +Initialize() +Cleanup() } ContextAwareBase --> IArchitectureContext : 使用 IController --|> ContextAwareBase ``` **图表来源** - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L28) ## 依赖关系分析 GFramework采用清晰的依赖层次结构,确保模块间的松耦合和高内聚。 ### 项目依赖图 ```mermaid graph TB subgraph "外部依赖" DotNet[.NET 8/9] NuGet[NuGet包管理器] end subgraph "核心框架" Core[GFramework.Core] CoreAbstraction[GFramework.Core.Abstractions] end subgraph "功能扩展" Game[GFramework.Game] GameAbstraction[GFramework.Game.Abstractions] Godot[GFramework.Godot] SourceGen[GFramework.SourceGenerators] end subgraph "测试" CoreTests[GFramework.Core.Tests] end DotNet --> Core NuGet --> Core CoreAbstraction --> Core Game --> Core GameAbstraction --> Game Godot --> Core SourceGen --> Core CoreTests --> Core ``` **图表来源** - [GFramework.Core/GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj#L1-L13) - [GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj](file://GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj#L1-L29) ### 组件间通信机制 ```mermaid graph LR subgraph "事件驱动通信" EventSystem[事件系统] EventBus[IEventBus] EventHandlers[事件处理器] end subgraph "依赖注入" IoC[IoC容器] Container[IIocContainer] Services[架构服务] end subgraph "上下文管理" Context[架构上下文] ArchitectureContext[IArchitectureContext] end EventSystem --> EventBus EventBus --> EventHandlers IoC --> Container Container --> Services Services --> ArchitectureContext ArchitectureContext --> Context ``` **图表来源** - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L72-L87) **章节来源** - [GFramework.Core/GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj#L1-L13) - [GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj](file://GFramework.Core.Abstractions/GFramework.Core.Abstractions.csproj#L1-L29) ## 性能考虑 GFramework在设计时充分考虑了性能优化,提供多种性能提升策略: ### 内存管理优化 - **对象池化**: 通过AbstractNodePoolSystem实现Godot节点的高效复用 - **延迟初始化**: 组件采用延迟初始化策略,减少启动时间 - **生命周期管理**: 自动化的资源清理,防止内存泄漏 ### 并发处理 - **异步初始化**: 支持异步组件初始化,提高响应性 - **事件队列**: 事件处理采用队列机制,避免阻塞主线程 - **批量操作**: 支持批量注册和初始化操作 ### 编译时优化 - **源码生成器**: 通过源码生成器减少运行时开销 - **接口隔离**: 小而专注的接口设计,减少不必要的依赖 - **泛型优化**: 广泛使用泛型,提供类型安全的同时保持性能 ## 故障排除指南 ### 常见环境配置问题 #### .NET SDK安装问题 **问题**: dotnet命令不可用 **解决方案**: 1. 确认已安装.NET 8.0或更高版本 2. 重启开发环境使PATH生效 3. 运行`dotnet --info`验证安装 #### NuGet包引用问题 **问题**: 包安装失败或版本冲突 **解决方案**: 1. 清理NuGet缓存: `dotnet nuget locals all --clear` 2. 删除bin和obj文件夹 3. 重新还原包: `dotnet restore` ### 编译错误排查 #### 类型不匹配错误 **常见症状**: 编译时报错提示类型不匹配 **解决方法**: 1. 检查接口实现是否完整 2. 确认泛型参数类型正确 3. 验证依赖项版本兼容性 #### 依赖注入错误 **常见症状**: 运行时抛出依赖解析异常 **解决方法**: 1. 检查组件注册顺序 2. 确认构造函数参数正确 3. 验证模块安装时机 ### 运行时问题诊断 #### 事件未触发 **排查步骤**: 1. 检查事件注册是否在正确的生命周期阶段 2. 验证事件处理器是否正确实现 3. 确认事件类型匹配 #### 组件初始化失败 **排查步骤**: 1. 查看架构初始化日志 2. 检查组件依赖关系 3. 验证上下文绑定状态 **章节来源** - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L164-L183) - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L357-L396) ## 结论 GFramework为游戏开发提供了一个完整、可扩展且高性能的架构解决方案。通过模块化设计和清晰的分层架构,开发者可以专注于游戏逻辑的实现,而无需担心底层基础设施的复杂性。 ### 主要优势 - **平台无关**: 核心模块可在任何.NET环境中运行 - **模块化设计**: 支持按需组合和扩展功能模块 - **类型安全**: 基于泛型的组件获取和事件系统 - **事件驱动**: 松耦合的组件通信机制 - **生命周期管理**: 自动化的组件初始化和清理 ### 下一步建议 1. 从简单的游戏原型开始实践 2. 参考测试用例理解最佳实践 3. 根据项目需求选择合适的模块组合 4. 利用源码生成器提升开发效率 ## 附录 ### 快速开始模板 以下是一个最小化的GFramework项目模板: ```csharp // 1. 定义架构 public class MyGameArchitecture : Architecture { protected override void Init() { RegisterModel(new GameStateModel()); RegisterSystem(new GameStateSystem()); RegisterUtility(new GameUtility()); } } // 2. 定义模型 public class GameStateModel : AbstractModel { public BindableProperty Score { get; } = new(0); protected override void OnInit() { // 初始化逻辑 } } // 3. 定义系统 public class GameStateSystem : AbstractSystem { protected override void OnInit() { this.RegisterEvent(OnGameEvent); } private void OnGameEvent(GameEvent e) { // 业务逻辑 } } // 4. 初始化和运行 var architecture = new MyGameArchitecture(); architecture.Initialize(); ``` ### 测试验证清单 - [ ] 架构成功初始化 - [ ] 所有组件正确注册 - [ ] 事件系统正常工作 - [ ] 数据绑定功能正常 - [ ] 生命周期管理正确执行 ### 项目打包建议 1. 配置适当的版本号和发布设置 2. 确保所有依赖项正确打包 3. 测试不同.NET版本的兼容性 4. 准备部署脚本和自动化流程