# 项目概述

<cite>
**本文档引用的文件**
- [README.md](file://README.md)
- [GFramework.Core/README.md](file://GFramework.Core/README.md)
- [GFramework.Core.Abstractions/README.md](file://GFramework.Core.Abstractions/README.md)
- [GFramework.Core/architecture/README.md](file://GFramework.Core/architecture/README.md)
- [GFramework.Core/events/README.md](file://GFramework.Core/events/README.md)
- [GFramework.Core/ioc/README.md](file://GFramework.Core/ioc/README.md)
- [GFramework.Core/command/README.md](file://GFramework.Core/command/README.md)
- [GFramework.Core/query/README.md](file://GFramework.Core/query/README.md)
- [GFramework.Core/property/README.md](file://GFramework.Core/property/README.md)
- [GFramework.Core/logging/README.md](file://GFramework.Core/logging/README.md)
- [GFramework.Core/system/README.md](file://GFramework.Core/system/README.md)
- [GFramework.Core/model/README.md](file://GFramework.Core/model/README.md)
- [GFramework.Core/utility/README.md](file://GFramework.Core/utility/README.md)
- [GFramework.Game/README.md](file://GFramework.Game/README.md)
- [GFramework.Godot/README.md](file://GFramework.Godot/README.md)
</cite>

## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考量](#性能考量)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)

## 引言
GFramework 是一个面向游戏开发场景的综合性 C# 架构框架，强调模块化、平台无关与 Clean Architecture 设计。它通过命令查询职责分离（CQRS）、事件驱动、依赖注入、属性绑定、日志框架与生命周期管理等核心能力，帮助团队构建清晰、可维护、可扩展的游戏应用。

- 平台无关：核心模块 GFramework.Core 与 Godot 解耦，可在任意 .NET 环境运行。
- 深度集成：通过 GFramework.Godot 提供与 Godot 引擎的无缝集成与扩展。
- 清洁架构：从 View/UI 到 Utility 的分层设计，职责清晰、易于测试与演进。

## 项目结构
项目采用多模块分层组织，核心模块与平台集成模块分离，便于移植与扩展：

```mermaid
graph TB
subgraph "核心模块"
Core["GFramework.Core"]
CoreAbst["GFramework.Core.Abstractions"]
Game["GFramework.Game"]
GameAbst["GFramework.Game.Abstractions"]
end
subgraph "平台集成"
Godot["GFramework.Godot"]
GodotSrcGen["GFramework.Godot.SourceGenerators"]
SrcGen["GFramework.SourceGenerators"]
SrcGenAbst["GFramework.SourceGenerators.Abstractions"]
end
Core --> CoreAbst
Game --> Core
Game --> GameAbst
Godot --> Core
Godot --> CoreAbst
GodotSrcGen --> Godot
SrcGen --> Core
SrcGenAbst --> Core
```

图表来源
- [README.md](file://README.md#L33-L51)
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L1-L508)
- [GFramework.Game/README.md](file://GFramework.Game/README.md#L1-L1402)
- [GFramework.Godot/README.md](file://GFramework.Godot/README.md#L1-L893)

章节来源
- [README.md](file://README.md#L33-L51)
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L1-L508)

## 核心组件
GFramework 的核心能力围绕以下组件展开，它们共同构成 Clean Architecture 的分层与横切关注点：

- 架构与生命周期：IArchitecture、IArchitectureContext、IArchitectureModule、ArchitecturePhase
- 依赖注入：IIocContainer、IocContainer
- 命令查询分离：ICommand/ICommand<TResult>、IQuery<TResult>、CommandBus、QueryBus
- 事件系统：IEventBus、EasyEvent/EasyEventGeneric、EventBus、UnRegisterList
- 属性绑定：IBindableProperty/IReadonlyBindableProperty、BindableProperty
- 日志框架：ILogger、ILoggerFactory、ILoggerFactoryProvider、LogLevel
- 数据模型：IModel、AbstractModel
- 业务系统：ISystem、AbstractSystem
- 工具层：IUtility、IContextUtility、AbstractContextUtility
- 游戏特定：资产目录、存储系统、序列化、UI 路由与过渡管线等

章节来源
- [GFramework.Core.Abstractions/README.md](file://GFramework.Core.Abstractions/README.md#L1-L522)
- [GFramework.Core/architecture/README.md](file://GFramework.Core/architecture/README.md#L1-L503)
- [GFramework.Core/ioc/README.md](file://GFramework.Core/ioc/README.md#L1-L681)
- [GFramework.Core/command/README.md](file://GFramework.Core/command/README.md#L1-L309)
- [GFramework.Core/query/README.md](file://GFramework.Core/query/README.md#L1-L433)
- [GFramework.Core/events/README.md](file://GFramework.Core/events/README.md#L1-L523)
- [GFramework.Core/property/README.md](file://GFramework.Core/property/README.md#L1-L342)
- [GFramework.Core/logging/README.md](file://GFramework.Core/logging/README.md#L1-L364)
- [GFramework.Core/model/README.md](file://GFramework.Core/model/README.md#L1-L184)
- [GFramework.Core/system/README.md](file://GFramework.Core/system/README.md#L1-L544)
- [GFramework.Core/utility/README.md](file://GFramework.Core/utility/README.md#L1-L613)

## 架构总览
GFramework 采用 Clean Architecture 的五层结构，并引入横切关注点（命令/查询/事件）贯穿各层，形成“View/UI → Controller → System → Model → Utility”的数据与控制流。

```mermaid
graph TB
View["View/UI<br/>用户界面"] --> Controller["Controller<br/>处理用户输入"]
Controller --> System["System<br/>业务逻辑"]
System --> Model["Model<br/>游戏状态"]
Model --> Utility["Utility<br/>无状态工具"]
Controller -. 横切 .-> Cmd["Command/Query/Event"]
System -. 横切 .-> Cmd
Model -. 横切 .-> Cmd
Utility -. 横切 .-> Cmd
```

图表来源
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L42-L108)
- [GFramework.Core/architecture/README.md](file://GFramework.Core/architecture/README.md#L107-L124)

章节来源
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L42-L108)

## 详细组件分析

### 依赖注入（IoC）
- IocContainer 提供注册、解析与生命周期管理，支持单例、多实现、排序解析与冻结保护。
- Architecture 内置 IoC 容器，统一管理 System、Model、Utility 的注册与获取。
- 最佳实践：在 Init 中集中注册；使用接口注册与解析；避免运行时频繁注册；初始化后冻结容器。

```mermaid
classDiagram
class IIocContainer {
+Register(instance)
+RegisterSingleton(instance)
+RegisterPlurality(instance)
+RegisterSystem(system)
+Get~T~()
+GetAll~T~()
+GetRequired~T~()
+GetAllSorted~T~(comparison)
+Contains~T~()
+ContainsInstance(instance)
+Clear()
+Freeze()
}
class IocContainer {
-typeIndex : Dictionary
-objects : HashSet
-lock : ReaderWriterLockSlim
-frozen : bool
}
IIocContainer <|.. IocContainer
```

图表来源
- [GFramework.Core/ioc/README.md](file://GFramework.Core/ioc/README.md#L10-L681)

章节来源
- [GFramework.Core/ioc/README.md](file://GFramework.Core/ioc/README.md#L1-L681)
- [GFramework.Core/architecture/README.md](file://GFramework.Core/architecture/README.md#L148-L173)

### 事件系统（Event System）
- IEventBus 提供类型化事件的注册与发送；EasyEvent/EasyEventGeneric 支持无参/单参/双参事件。
- UnRegisterList 统一管理注销，配合 Godot 节点生命周期自动清理。
- 架构事件：ArchitectureLifecycleReadyEvent、ArchitectureDestroyingEvent、ArchitectureDestroyedEvent、ArchitectureFailedInitializationEvent。

```mermaid
sequenceDiagram
participant Sys as "System"
participant Bus as "EventBus"
participant Ctrl as "Controller/UI"
Sys->>Bus : Register<T>(handler)
Sys->>Bus : Send<T>(event)
Bus-->>Ctrl : 触发回调
Ctrl->>Ctrl : UnRegisterWhenNodeExitTree(node)
```

图表来源
- [GFramework.Core/events/README.md](file://GFramework.Core/events/README.md#L138-L162)
- [GFramework.Core/events/README.md](file://GFramework.Core/events/README.md#L213-L223)

章节来源
- [GFramework.Core/events/README.md](file://GFramework.Core/events/README.md#L1-L523)

### 命令查询分离（CQRS）
- ICommand/ICommand<TResult> 封装写操作；IQuery<TResult> 封装读操作。
- CommandBus/QueryBus 统一分发与执行；EmptyCommandInput/EmptyQueryInput 简化无参场景。
- 使用建议：命令原子性、无状态、参数结构化；查询只读、可组合、避免过度查询。

```mermaid
flowchart TD
Start(["发起操作"]) --> CheckType{"命令还是查询?"}
CheckType --> |命令| SendCmd["CommandBus.Send(command)"]
CheckType --> |查询| SendQry["QueryBus.Send(query)"]
SendCmd --> ExecCmd["执行 OnExecute<br/>修改 Model/发送事件"]
SendQry --> ExecQry["执行 Do()<br/>返回结果"]
ExecCmd --> End(["完成"])
ExecQry --> End
```

图表来源
- [GFramework.Core/command/README.md](file://GFramework.Core/command/README.md#L150-L173)
- [GFramework.Core/query/README.md](file://GFramework.Core/query/README.md#L50-L65)

章节来源
- [GFramework.Core/command/README.md](file://GFramework.Core/command/README.md#L1-L309)
- [GFramework.Core/query/README.md](file://GFramework.Core/query/README.md#L1-L433)

### 属性绑定（Property Binding）
- IBindableProperty/IReadonlyBindableProperty 支持值变化监听与响应式更新。
- RegisterWithInitValue 立即触发回调，适合 UI 绑定；SetValueWithoutEvent 批量更新避免频繁触发。
- 与事件系统协同，实现 Model → UI 的自动更新。

```mermaid
sequenceDiagram
participant Model as "Model"
participant Prop as "BindableProperty<T>"
participant UI as "UI/Controller"
Model->>Prop : Value = newValue
Prop-->>UI : 触发回调(监听者)
UI->>UI : 更新界面显示
```

图表来源
- [GFramework.Core/property/README.md](file://GFramework.Core/property/README.md#L45-L100)

章节来源
- [GFramework.Core/property/README.md](file://GFramework.Core/property/README.md#L1-L342)

### 日志框架（Logging）
- ILogger/ILoggerFactory/ILoggerFactoryProvider 提供多级别日志记录与工厂解析。
- 默认 Info 级别，支持 Trace/Debug/Info/Warning/Error/Fatal。
- 建议：为模块创建独立 Logger；异常日志记录；分类使用日志；合理设置最小级别。

章节来源
- [GFramework.Core/logging/README.md](file://GFramework.Core/logging/README.md#L1-L364)

### 数据模型（Model）
- IModel/AbstractModel 管理数据与状态；监听属性变化并发送事件。
- 最佳实践：Model 仅存储数据；复杂逻辑放入 System；避免 Model 间直接调用。

章节来源
- [GFramework.Core/model/README.md](file://GFramework.Core/model/README.md#L1-L184)

### 业务系统（System）
- ISystem/AbstractSystem 处理业务逻辑，响应事件并协调 Model。
- 最佳实践：单一职责、事件驱动、无状态或少状态、初始化注册。

章节来源
- [GFramework.Core/system/README.md](file://GFramework.Core/system/README.md#L1-L544)

### 工具层（Utility）
- IUtility/IContextUtility 提供无状态工具方法；AbstractContextUtility 支持日志与上下文。
- 最佳实践：纯函数、单一职责、避免依赖架构组件。

章节来源
- [GFramework.Core/utility/README.md](file://GFramework.Core/utility/README.md#L1-L613)

### 游戏特定功能（GFramework.Game）
- 模块化架构：AbstractModule 支持生命周期阶段感知与模块安装。
- 资产管理：统一资源目录、类型安全、映射与缓存。
- 存储系统：分层存储、多格式支持、异步操作、版本兼容。
- 序列化系统：JSON 集成、自定义转换器、版本化序列化与迁移。

章节来源
- [GFramework.Game/README.md](file://GFramework.Game/README.md#L1-L1402)

### 平台集成（GFramework.Godot）
- 架构生命周期绑定：自动与 Godot 场景树同步，节点销毁时自动清理。
- Node 扩展方法：50+ 实用扩展，简化节点查找、验证、场景树操作、输入处理与异步等待。
- 信号系统：SignalBuilder 流畅 API，桥接 Godot 信号与框架事件。
- 节点池化：AbstractNodePoolSystem 支持高频节点创建/销毁的内存友好策略。
- 资源管理：ResourceLoadUtility、自定义资源工厂。
- 日志系统：GodotLogger/GodotLoggerFactory，与引擎日志集成。

章节来源
- [GFramework.Godot/README.md](file://GFramework.Godot/README.md#L1-L893)

## 依赖分析
- 核心依赖：GFramework.Core 与 GFramework.Core.Abstractions 提供抽象契约与实现。
- 平台集成：GFramework.Godot 依赖 Core 与 Abstractions，并提供 Godot 特定扩展。
- 游戏模块：GFramework.Game 依赖 Core 与 Game.Abstractions，提供资产、存储、序列化等游戏功能。
- 源码生成器：GFramework.SourceGenerators 与 GFramework.Godot.SourceGenerators 提供上下文感知、日志与枚举扩展的零运行时开销代码生成。

```mermaid
graph LR
Core["GFramework.Core"] --> Abst["GFramework.Core.Abstractions"]
Game["GFramework.Game"] --> Core
Game --> GameAbst["GFramework.Game.Abstractions"]
Godot["GFramework.Godot"] --> Core
Godot --> Abst
SrcGen["GFramework.SourceGenerators"] --> Core
GodotSrcGen["GFramework.Godot.SourceGenerators"] --> Godot
```

图表来源
- [README.md](file://README.md#L33-L51)
- [GFramework.Game/README.md](file://GFramework.Game/README.md#L1379-L1387)

章节来源
- [README.md](file://README.md#L33-L51)
- [GFramework.Game/README.md](file://GFramework.Game/README.md#L1379-L1387)

## 性能考量
- 事件系统：避免每帧触发高频事件；使用结构体事件减少 GC；条件事件过滤。
- 属性绑定：使用 SetValueWithoutEvent 批量更新；自定义比较器避免浮点误差导致的频繁触发。
- IoC 容器：初始化后冻结容器；避免运行时频繁注册；合理使用 GetRequired/Contains。
- 游戏模块：分层存储命名与缓存；批量写入与异步 I/O；序列化格式与压缩策略；对象池化降低 GC 压力。

## 故障排除指南
- 事件未注销：使用 UnRegisterList 或 UnRegisterWhenNodeExitTree；在 _ExitTree 中统一注销。
- 循环依赖：避免在事件处理器中直接发送新事件；通过命令打破循环。
- 初始化失败：检查 ArchitecturePhase 与 FailedInitialization 事件；逐步排查注册顺序与依赖。
- 日志级别：确认 LoggerFactoryResolver.Provider 与 MinLevel 设置；区分 Info/Debug/Warn/Error/Fatal。
- 模块安装：确保在 ArchitecturePhase.Ready 前注册生命周期钩子；模块安装顺序影响依赖解析。

章节来源
- [GFramework.Core/events/README.md](file://GFramework.Core/events/README.md#L437-L463)
- [GFramework.Core/logging/README.md](file://GFramework.Core/logging/README.md#L215-L252)
- [GFramework.Core/architecture/README.md](file://GFramework.Core/architecture/README.md#L283-L325)

## 结论
GFramework 以 Clean Architecture 为核心，结合 CQRS、事件驱动、依赖注入、属性绑定与生命周期管理，为游戏开发提供了平台无关、模块化、可扩展的基础设施。通过 GFramework.Game 与 GFramework.Godot，开发者可以在不同平台上快速落地架构理念，并获得强大的游戏功能与平台集成能力。

## 附录

### 技术栈概览
- .NET：6.0+
- Godot：4.5+
- 依赖库：Newtonsoft.Json 等（详见各模块 README）

章节来源
- [README.md](file://README.md#L6-L7)
- [GFramework.Game/README.md](file://GFramework.Game/README.md#L1389-L1393)

### 快速开始与安装
- 安装 NuGet 包：GeWuYou.GFramework.Core、GeWuYou.GFramework.Core.Abstractions、GeWuYou.GFramework.Game、GeWuYou.GFramework.Game.Abstractions、GeWuYou.GFramework.SourceGenerators、GeWuYou.GFramework.Godot（Godot 项目）。
- 基本使用：定义架构（继承 Architecture）、注册 Model/System/Utility、在 Controller 中使用依赖注入、通过 SendCommand/SendQuery/事件通信。

章节来源
- [README.md](file://README.md#L88-L105)
- [README.md](file://README.md#L107-L159)
- [README.md](file://README.md#L161-L233)
- [README.md](file://README.md#L255-L274)