# 迁移和升级指南
**本文档引用的文件**
- [README.md](file://README.md)
- [GFramework.Core/README.md](file://GFramework.Core/README.md)
- [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/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs)
- [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs)
- [GFramework.Game/architecture/AbstractModule.cs](file://GFramework.Game/architecture/AbstractModule.cs)
- [GFramework.Godot/architecture/AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs)
- [GFramework.Godot/architecture/AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs)
- [GFramework.Core/logging/ConsoleLoggerFactory.cs](file://GFramework.Core/logging/ConsoleLoggerFactory.cs)
- [GFramework.SourceGenerators/README.md](file://GFramework.SourceGenerators/README.md)
- [GFramework.Core.Tests/TEST_COVERAGE_PLAN.md](file://GFramework.Core.Tests/TEST_COVERAGE_PLAN.md)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
GFramework是一个专为游戏开发场景设计的综合性C#游戏开发框架,基于Clean Architecture原则构建,提供模块化、可扩展的架构解决方案。框架采用"约定优于配置"的设计理念,通过清晰的分层架构和强大的组件系统,为游戏开发提供了完整的基础设施。
### 主要特性
- **平台无关性**:GFramework.Core是纯.NET库,可在任何.NET环境中运行
- **模块化设计**:支持架构模块安装和扩展
- **生命周期管理**:阶段式的架构生命周期管理
- **依赖注入**:内置IoC容器管理对象生命周期
- **事件驱动**:类型安全的事件系统实现松耦合
- **响应式编程**:可绑定属性支持响应式数据流
- **源码生成器**:零运行时开销的代码生成
## 项目结构
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
源码生成器]
end
subgraph "测试"
Tests[GFramework.Core.Tests
单元测试]
end
Core --> CoreAbstraction
Game --> Core
Game --> GameAbstraction
Godot --> Game
Godot --> CoreAbstraction
SourceGen --> Core
Tests --> Core
```
**图表来源**
- [README.md](file://README.md#L235-L253)
- [GFramework.Core/GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj#L1-L13)
**章节来源**
- [README.md](file://README.md#L235-L283)
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L1-L508)
## 核心组件
### 架构系统
GFramework的核心是Architecture类,它作为整个应用的"中央调度器",负责管理所有组件的生命周期和注册。
```mermaid
classDiagram
class Architecture {
+Initialize() void
+InitializeAsync() Task
+RegisterModel~T~(model) T
+RegisterSystem~T~(system) T
+RegisterUtility~T~(utility) T
+InstallModule(module) IArchitectureModule
+Destroy() void
-Init() void
-EnterPhase(next) void
-ValidatePhaseTransition(next) void
}
class IArchitecture {
<>
+Initialize() void
+InitializeAsync() Task
+RegisterModel~T~(model) T
+RegisterSystem~T~(system) T
+RegisterUtility~T~(utility) T
+InstallModule(module) IArchitectureModule
+Destroy() void
}
class ArchitectureConfiguration {
+LoggerProperties LoggerProperties
+ArchitectureProperties ArchitectureProperties
}
class ArchitectureConstants {
+PhaseOrder ArchitecturePhase[]
+PhaseTransitions ImmutableDictionary
}
Architecture ..|> IArchitecture
Architecture --> ArchitectureConfiguration
Architecture --> ArchitectureConstants
```
**图表来源**
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569)
- [GFramework.Core/architecture/ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L12-L35)
- [GFramework.Core/architecture/ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54)
### 依赖注入容器
IocContainer提供线程安全的依赖注入功能,支持单例和多重注册:
```mermaid
classDiagram
class IocContainer {
-ReaderWriterLockSlim lock
-bool _frozen
-HashSet~object~ _objects
-Dictionary~Type, HashSet~object~~ _typeIndex
+RegisterSingleton~T~(instance) void
+RegisterPlurality(instance) void
+Register~T~(instance) void
+Get~T~() T?
+GetRequired~T~() T
+GetAll~T~() IReadOnlyList~T~
+Contains~T~() bool
+Freeze() void
}
class IIocContainer {
<>
+RegisterSingleton~T~(instance) void
+RegisterPlurality(instance) void
+Get~T~() T?
+GetRequired~T~() T
+GetAll~T~() IReadOnlyList~T~
+Contains~T~() bool
+Freeze() void
}
IocContainer ..|> IIocContainer
```
**图表来源**
- [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373)
**章节来源**
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569)
- [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L1-L373)
## 架构概览
### 五层架构设计
GFramework遵循Clean Architecture原则,采用清晰的分层架构:
```mermaid
graph TB
subgraph "表现层/UI"
UI[用户界面]
end
subgraph "控制层/Controller"
Controller[控制器]
end
subgraph "逻辑层/System"
System[系统]
end
subgraph "数据层/Model"
Model[模型]
end
subgraph "工具层/Utility"
Utility[工具]
end
subgraph "横切关注点"
Command[命令]
Query[查询]
Event[事件]
end
UI --> Controller
Controller --> System
Controller --> Model
System --> Model
System --> Event
Model --> Event
Controller --> Event
Controller --> Command
System --> Command
Model --> Query
Controller --> Query
```
**图表来源**
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L42-L108)
### 架构阶段流程
```mermaid
sequenceDiagram
participant App as 应用程序
participant Arch as Architecture
participant Utils as 工具组件
participant Models as 模型组件
participant Systems as 系统组件
App->>Arch : Initialize()
Arch->>Arch : Init()
Arch->>Utils : RegisterSystem()
Utils->>Utils : SetContext()
Utils->>Utils : Init()
Arch->>Models : RegisterModel()
Models->>Models : SetContext()
Models->>Models : Init()
Arch->>Systems : RegisterSystem()
Systems->>Systems : SetContext()
Systems->>Systems : Init()
Arch->>Arch : Freeze Container
Arch->>Arch : Enter Ready Phase
Arch-->>App : Architecture Ready
```
**图表来源**
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L531-L566)
**章节来源**
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L66-L108)
## 详细组件分析
### 模块系统
GFramework提供灵活的模块化架构,支持游戏功能的模块化扩展:
```mermaid
classDiagram
class IArchitectureModule {
<>
+Install(IArchitecture) void
+OnPhase(ArchitecturePhase, IArchitecture) void
+OnArchitecturePhase(ArchitecturePhase) void
}
class AbstractModule {
+Install(IArchitecture) void
+OnPhase(ArchitecturePhase, IArchitecture) void
+OnArchitecturePhase(ArchitecturePhase) void
}
class AbstractGodotModule {
+Node Node
+Install(IArchitecture) void
+OnPhase(ArchitecturePhase, IArchitecture) void
+OnAttach(Architecture) void
+OnDetach() void
}
IArchitectureModule <|.. AbstractModule
AbstractModule <|-- AbstractGodotModule
```
**图表来源**
- [GFramework.Game/architecture/AbstractModule.cs](file://GFramework.Game/architecture/AbstractModule.cs#L9-L33)
- [GFramework.Godot/architecture/AbstractGodotModule.cs](file://GFramework.Godot/architecture/AbstractGodotModule.cs#L11-L55)
### 数据迁移系统
GFramework提供完整的数据迁移和版本管理功能:
```mermaid
flowchart TD
Start([开始迁移]) --> CheckVersion["检查当前版本"]
CheckVersion --> CompareVersion{"版本比较"}
CompareVersion --> |需要迁移| FindMigration["查找迁移器"]
CompareVersion --> |无需迁移| Complete["迁移完成"]
FindMigration --> ApplyMigration["应用迁移"]
ApplyMigration --> UpdateVersion["更新版本信息"]
UpdateVersion --> NextVersion{"还有版本需要迁移?"}
NextVersion --> |是| FindMigration
NextVersion --> |否| Complete
Complete --> End([结束])
```
**图表来源**
- [GFramework.Game/README.md](file://GFramework.Game/README.md#L120-L200)
**章节来源**
- [GFramework.Game/architecture/AbstractModule.cs](file://GFramework.Game/architecture/AbstractModule.cs#L1-L33)
- [GFramework.Godot/architecture/AbstractArchitecture.cs](file://GFramework.Godot/architecture/AbstractArchitecture.cs#L1-L140)
### 日志系统
GFramework提供灵活的日志配置和管理功能:
```mermaid
classDiagram
class ILoggerFactory {
<>
+GetLogger(name, minLevel) ILogger
}
class ConsoleLoggerFactory {
+GetLogger(name, minLevel) ILogger
}
class ArchitectureConfiguration {
+LoggerProperties LoggerProperties
}
class LoggerProperties {
+ILoggerFactoryProvider LoggerFactoryProvider
+LogLevel MinLevel
}
ILoggerFactory <|.. ConsoleLoggerFactory
ArchitectureConfiguration --> LoggerProperties
```
**图表来源**
- [GFramework.Core/logging/ConsoleLoggerFactory.cs](file://GFramework.Core/logging/ConsoleLoggerFactory.cs#L8-L20)
**章节来源**
- [GFramework.Core/logging/ConsoleLoggerFactory.cs](file://GFramework.Core/logging/ConsoleLoggerFactory.cs#L1-L20)
## 依赖分析
### 组件耦合关系
```mermaid
graph LR
subgraph "核心依赖"
CoreAbstraction[GFramework.Core.Abstractions]
Core[GFramework.Core]
end
subgraph "游戏功能"
GameAbstraction[GFramework.Game.Abstractions]
Game[GFramework.Game]
end
subgraph "平台集成"
GodotAbstraction[GFramework.Core.Abstractions]
Godot[GFramework.Godot]
end
subgraph "源码生成"
SourceGenAbstraction[GFramework.SourceGenerators.Abstractions]
SourceGen[GFramework.SourceGenerators]
end
CoreAbstraction --> Core
GameAbstraction --> Game
GodotAbstraction --> Godot
SourceGenAbstraction --> SourceGen
Game --> Core
Godot --> Game
Godot --> CoreAbstraction
SourceGen --> Core
```
**图表来源**
- [GFramework.Core/GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj#L9-L12)
- [GFramework.Godot/GFramework.Godot.csproj](file://GFramework.Godot/GFramework.Godot.csproj#L16-L21)
### 版本兼容性矩阵
| 组件 | .NET 8.0 | .NET 9.0 | .NET 10.0 |
|------|----------|----------|-----------|
| GFramework.Core | ✓ | ✓ | ✓ |
| GFramework.Game | ✓ | ✓ | ✓ |
| GFramework.Godot | ✓ | ✓ | ✓ |
| GFramework.SourceGenerators | ✓ | ✓ | ✓ |
**章节来源**
- [GFramework.Core/GFramework.Core.csproj](file://GFramework.Core/GFramework.Core.csproj#L4-L8)
- [GFramework.Godot/GFramework.Godot.csproj](file://GFramework.Godot/GFramework.Godot.csproj#L7-L7)
## 性能考虑
### 内存管理
GFramework通过以下机制优化内存使用:
1. **对象池化**:支持对象池系统减少垃圾回收压力
2. **延迟初始化**:上下文和日志记录器的延迟初始化
3. **线程安全**:使用ReaderWriterLockSlim优化并发访问
4. **容器冻结**:初始化后冻结IoC容器防止意外修改
### 性能优化建议
```mermaid
flowchart TD
Start([性能优化开始]) --> Profile["性能分析"]
Profile --> IdentifyBottlenecks["识别瓶颈"]
IdentifyBottlenecks --> OptimizeMemory["内存优化"]
OptimizeMemory --> OptimizeCPU["CPU优化"]
OptimizeCPU --> Test["测试验证"]
Test --> Profile
OptimizeMemory --> Pooling["对象池化"]
OptimizeMemory --> LazyInit["延迟初始化"]
OptimizeMemory --> ReadOnlyStructs["只读结构体"]
OptimizeCPU --> AsyncOps["异步操作"]
OptimizeCPU --> Caching["缓存策略"]
OptimizeCPU --> BatchOps["批量操作"]
```
**章节来源**
- [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L14-L32)
## 故障排除指南
### 常见问题诊断
#### 架构初始化失败
**症状**:架构初始化抛出InvalidOperationException
**可能原因**:
1. 组件注册时机错误(在Ready阶段后注册)
2. 重复注册单例
3. 依赖注入循环
**解决方案**:
```csharp
// 检查架构配置
var config = new ArchitectureConfiguration();
config.ArchitectureProperties.AllowLateRegistration = true; // 临时解决方案
// 验证组件注册顺序
architecture.RegisterUtility(myUtility);
architecture.RegisterModel(myModel);
architecture.RegisterSystem(mySystem);
```
#### 模块安装问题
**症状**:模块安装后无法正常工作
**排查步骤**:
1. 检查模块是否正确实现Install方法
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#L216-L223)
### 测试和验证
#### 单元测试策略
根据测试覆盖计划,建议重点关注以下区域:
1. **异步功能测试**:CommandBus、AbstractAsyncCommand、AsyncQueryBus、AbstractAsyncQuery
2. **工具基类测试**:AbstractContextUtility
3. **常量验证测试**:ArchitectureConstants、GFrameworkConstants
**章节来源**
- [GFramework.Core.Tests/TEST_COVERAGE_PLAN.md](file://GFramework.Core.Tests/TEST_COVERAGE_PLAN.md#L166-L350)
## 结论
GFramework提供了一个完整、模块化且高度可扩展的游戏开发框架。通过清晰的分层架构、强大的组件系统和灵活的模块化设计,开发者可以快速构建高质量的游戏应用。
### 主要优势
1. **架构清晰**:遵循Clean Architecture原则,职责分离明确
2. **扩展性强**:模块化设计支持功能扩展和平台移植
3. **性能优秀**:零运行时开销的源码生成器和优化的内存管理
4. **开发效率**:丰富的工具和最佳实践减少开发成本
### 未来发展方向
1. **持续测试改进**:完善异步功能的单元测试覆盖
2. **平台扩展**:支持更多游戏引擎和平台
3. **性能优化**:进一步优化内存使用和执行效率
4. **文档完善**:持续更新API文档和最佳实践指南
## 附录
### 迁移检查清单
#### 从旧版本升级
1. **备份项目**:创建完整的项目备份
2. **检查依赖**:确认.NET版本兼容性
3. **更新包引用**:升级到最新版本的GFramework包
4. **测试功能**:验证核心功能正常运行
5. **性能测试**:运行性能基准测试
#### 从其他框架迁移
1. **分析现有架构**:识别现有的组件和数据结构
2. **设计迁移策略**:制定逐步迁移计划
3. **创建映射层**:实现新旧框架的兼容层
4. **数据迁移**:安全地迁移游戏数据
5. **功能验证**:确保所有功能正常工作
#### 自定义扩展开发
1. **创建模块**:继承AbstractModule或AbstractGodotModule
2. **实现接口**:遵循GFramework的接口约定
3. **注册组件**:在Install方法中注册所需组件
4. **测试验证**:编写单元测试验证功能
5. **文档编写**:为新模块编写使用文档