# 架构基类设计
**本文档引用的文件**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs)
- [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs)
- [IArchitectureConfiguration.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureConfiguration.cs)
- [IArchitectureContext.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureContext.cs)
- [IArchitectureServices.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureServices.cs)
- [ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs)
- [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs)
- [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs)
- [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs)
- [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs)
- [ArchitectureProperties.cs](file://GFramework.Core.Abstractions/properties/ArchitectureProperties.cs)
- [LoggerProperties.cs](file://GFramework.Core.Abstractions/properties/LoggerProperties.cs)
- [DefaultEnvironment.cs](file://GFramework.Core/environment/DefaultEnvironment.cs)
- [TestArchitectureBase.cs](file://GFramework.Core.Tests/architecture/TestArchitectureBase.cs)
- [SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs)
- [AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs)
- [GameContext.cs](file://GFramework.Core/architecture/GameContext.cs)
## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)
## 引言
GFramework架构基类是整个游戏开发框架的核心基础设施,它提供了一个完整的组件注册与管理中心,专注于系统、模型、工具等组件的生命周期管理。该架构基类采用组合优于继承的设计原则,通过依赖注入容器和事件总线实现了高度模块化的架构设计。
本文档将深入解析Architecture基类的设计理念、实现原理和最佳实践,帮助开发者理解如何正确使用和扩展这个强大的架构基类。
## 项目结构
GFramework架构基类位于核心库的architecture目录下,与抽象接口定义形成清晰的层次结构:
```mermaid
graph TB
subgraph "GFramework.Core.Abstractions"
IA["IArchitecture 接口"]
IAC["IArchitectureConfiguration 接口"]
IAS["IArchitectureServices 接口"]
IACT["IArchitectureContext 接口"]
AP["ArchitecturePhase 枚举"]
APp["ArchitectureProperties 类"]
LP["LoggerProperties 类"]
end
subgraph "GFramework.Core"
A["Architecture 基类"]
AC["ArchitectureConfiguration 类"]
AS["ArchitectureServices 类"]
ACT["ArchitectureContext 类"]
ACn["ArchitectureConstants 常量"]
DE["DefaultEnvironment 类"]
GC["GameContext 管理器"]
end
subgraph "测试示例"
TAB["TestArchitectureBase 基类"]
STA["SyncTestArchitecture"]
ATA["AsyncTestArchitecture"]
end
IA --> A
IAC --> AC
IAS --> AS
IACT --> ACT
AP --> ACn
APp --> AC
LP --> AC
A --> AC
A --> AS
A --> ACT
A --> ACn
TAB --> A
STA --> TAB
ATA --> TAB
GC --> ACT
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L19-L30)
- [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L7-L11)
**章节来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569)
- [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L1-L68)
## 核心组件
### 架构基类架构概览
Architecture基类作为系统、模型、工具等组件的注册与管理中心,提供了以下核心功能:
1. **生命周期管理**:完整的组件生命周期控制,包括初始化、运行和销毁阶段
2. **组件注册系统**:支持系统、模型、工具的注册和获取
3. **事件驱动架构**:基于事件总线的松耦合通信机制
4. **依赖注入容器**:内置IoC容器支持组件间的依赖管理
5. **阶段化初始化**:严格的阶段控制确保组件按正确顺序初始化
### 构造函数参数详解
架构基类的构造函数接受四个可选参数,每个参数都有其特定的职责和配置方式:
```mermaid
classDiagram
class Architecture {
-IArchitectureConfiguration configuration
-IEnvironment environment
-IArchitectureServices services
-IArchitectureContext context
-ILogger logger
-bool _mInitialized
+Initialize() void
+InitializeAsync() Task
+Destroy() void
+RegisterSystem(system) TSystem
+RegisterModel(model) TModel
+RegisterUtility(utility) TUtility
+InstallModule(module) IArchitectureModule
+RegisterLifecycleHook(hook) IArchitectureLifecycle
#EnterPhase(next) void
-Init() void*
}
class IArchitectureConfiguration {
<>
+LoggerProperties LoggerProperties
+ArchitectureProperties ArchitectureProperties
}
class IEnvironment {
<>
+string Name
+Initialize() void
}
class IArchitectureServices {
<>
+IIocContainer Container
+IEventBus EventBus
+ICommandBus CommandBus
+IQueryBus QueryBus
+IAsyncQueryBus AsyncQueryBus
}
class IArchitectureContext {
<>
+Context 属性
+GetService~T~() T?
+GetSystem~T~() T?
+GetModel~T~() T?
+GetUtility~T~() T?
+SendCommand(command) void
+SendQuery~T~(query) T?
+SendEvent~T~(event) void
}
Architecture ..|> IArchitecture
Architecture --> IArchitectureConfiguration
Architecture --> IEnvironment
Architecture --> IArchitectureServices
Architecture --> IArchitectureContext
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L29)
- [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68)
#### IArchitectureConfiguration 参数
IArchitectureConfiguration负责架构的整体配置,包括:
- **LoggerProperties**:日志配置,包含日志工厂提供程序和最小日志级别
- **ArchitectureProperties**:架构行为配置,包括延迟注册和严格阶段验证
#### IEnvironment 参数
IEnvironment提供运行环境信息,支持不同平台的环境适配:
- **Name**:环境名称标识
- **Initialize()**:环境初始化方法
#### IArchitectureServices 参数
IArchitectureServices提供核心服务组件:
- **IIocContainer**:依赖注入容器
- **IEventBus**:事件总线
- **ICommandBus**:命令总线
- **IQueryBus**:查询总线
- **IAsyncQueryBus**:异步查询总线
#### IArchitectureContext 参数
IArchitectureContext提供组件访问和通信能力:
- **服务获取**:系统、模型、工具的获取
- **命令执行**:同步和异步命令发送
- **查询执行**:查询请求处理
- **事件管理**:事件发送和注册
**章节来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L29)
- [IArchitectureConfiguration.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureConfiguration.cs#L8-L19)
- [IArchitectureServices.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureServices.cs#L12-L40)
- [IArchitectureContext.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureContext.cs#L16-L123)
## 架构概览
### 设计模式选择
Architecture基类采用了多种设计模式来实现其强大的功能:
```mermaid
graph TB
subgraph "核心设计模式"
C1["组合模式
通过依赖注入实现组件组合"]
C2["策略模式
可配置的环境和日志策略"]
C3["模板方法模式
抽象Init方法供子类实现"]
C4["观察者模式
事件总线实现松耦合通信"]
C5["工厂模式
组件注册和创建"]
C6["状态模式
阶段化的生命周期管理"]
end
subgraph "架构优势"
S1["高内聚低耦合"]
S2["可扩展性强"]
S3["可测试性好"]
S4["跨平台兼容"]
end
C1 --> S1
C2 --> S2
C3 --> S3
C4 --> S4
C5 --> S1
C6 --> S2
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L19-L22)
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L352-L352)
### 组合优于继承的优势
Architecture基类采用组合优于继承的设计原则,主要体现在:
1. **灵活性**:通过接口注入而非继承,提高了代码的灵活性
2. **可替换性**:不同的实现可以在运行时替换
3. **单一职责**:每个组件专注于自己的职责
4. **易于测试**:可以通过模拟对象轻松测试
## 详细组件分析
### 生命周期管理系统
Architecture基类实现了完整的生命周期管理,包括五个主要阶段:
```mermaid
stateDiagram-v2
[*] --> None
None --> BeforeUtilityInit : Initialize()
BeforeUtilityInit --> AfterUtilityInit : 工具初始化
AfterUtilityInit --> BeforeModelInit : 模型初始化
BeforeModelInit --> AfterModelInit : 模型初始化
AfterModelInit --> BeforeSystemInit : 系统初始化
BeforeSystemInit --> AfterSystemInit : 系统初始化
AfterSystemInit --> Ready : 冻结容器
Ready --> Destroying : Destroy()
Destroying --> Destroyed : 组件销毁
Ready --> FailedInitialization : 初始化失败
FailedInitialization --> Destroying : 错误处理
note right of BeforeUtilityInit
工具初始化阶段
- 上下文工具设置
- 环境初始化
end note
note right of BeforeModelInit
模型初始化阶段
- 数据模型加载
- 状态管理初始化
end note
note right of BeforeSystemInit
系统初始化阶段
- 游戏系统启动
- 资源管理器初始化
end note
```
**图表来源**
- [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L17-L29)
- [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66)
#### 阶段转换验证
架构基类实现了严格的阶段转换验证机制:
```mermaid
flowchart TD
Start([阶段转换请求]) --> CheckStrict["检查严格验证开关"]
CheckStrict --> |关闭| AllowDirect["直接允许转换"]
CheckStrict --> |开启| Validate["验证转换合法性"]
Validate --> CheckFailed["检查是否为FailedInitialization"]
CheckFailed --> |是| AllowDirect
CheckFailed --> |否| CheckAllowed["检查是否在允许列表中"]
CheckAllowed --> |是| Validate["验证通过"]
CheckAllowed --> |否| ThrowError["抛出InvalidOperationException"]
Validate --> UpdatePhase["更新当前阶段"]
UpdatePhase --> NotifyHooks["通知生命周期钩子"]
NotifyHooks --> NotifyAware["通知阶段感知对象"]
NotifyAware --> Complete([转换完成])
ThrowError --> Complete
AllowDirect --> UpdatePhase
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L164-L183)
**章节来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L142-L224)
- [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L38-L54)
### 组件注册与管理
Architecture基类提供了三种主要的组件注册方式:
#### 系统注册
系统注册是最常见的组件注册方式,适用于游戏的核心功能模块:
```mermaid
sequenceDiagram
participant Client as 客户端代码
participant Arch as Architecture
participant Container as IoC容器
participant System as 系统实例
Client->>Arch : RegisterSystem(system)
Arch->>Arch : ValidateRegistration("system")
Arch->>System : SetContext(context)
Arch->>Container : RegisterPlurality(system)
Arch->>Arch : RegisterLifecycleComponent(system)
Arch->>Arch : 记录日志
Arch-->>Client : 返回注册的系统实例
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L423-L437)
#### 模型注册
模型注册专门用于数据模型和状态管理:
```mermaid
sequenceDiagram
participant Client as 客户端代码
participant Arch as Architecture
participant Container as IoC容器
participant Model as 模型实例
Client->>Arch : RegisterModel(model)
Arch->>Arch : ValidateRegistration("model")
Arch->>Model : SetContext(context)
Arch->>Container : RegisterPlurality(model)
Arch->>Arch : RegisterLifecycleComponent(model)
Arch->>Arch : 记录日志
Arch-->>Client : 返回注册的模型实例
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L446-L460)
#### 工具注册
工具注册用于各种辅助功能和实用程序:
```mermaid
sequenceDiagram
participant Client as 客户端代码
participant Arch as Architecture
participant Container as IoC容器
participant Utility as 工具实例
Client->>Arch : RegisterUtility(utility)
Arch->>Utility : IfType(...)
Arch->>Utility : SetContext(context)
Arch->>Container : RegisterPlurality(utility)
Arch->>Arch : 记录日志
Arch-->>Client : 返回注册的工具实例
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L468-L483)
**章节来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L423-L483)
### 初始化流程控制
Architecture基类的初始化流程分为三个主要阶段:
```mermaid
flowchart TD
Start([Initialize/InitializeAsync]) --> SetupEnv["设置日志工厂和环境"]
SetupEnv --> InitEnv["初始化环境"]
InitEnv --> CreateContext["创建架构上下文"]
CreateContext --> BindContext["绑定到GameContext"]
BindContext --> SetServices["设置服务上下文"]
SetServices --> CallUserInit["调用用户Init()"]
CallUserInit --> InitComponents["初始化所有组件"]
InitComponents --> FreezeContainer["冻结IoC容器"]
FreezeContainer --> SetReady["设置Ready阶段"]
SetReady --> SendReadyEvent["发送Ready事件"]
SendReadyEvent --> Complete([初始化完成])
InitComponents --> InitUtilities["初始化工具类"]
InitUtilities --> InitModels["初始化模型"]
InitModels --> InitSystems["初始化系统"]
InitSystems --> Complete
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L531-L566)
#### 组件初始化顺序
架构基类严格按照预定义的顺序初始化不同类型的组件:
1. **工具类初始化**:总是先于其他组件初始化
2. **模型初始化**:数据层组件的初始化
3. **系统初始化**:核心游戏系统的初始化
这种顺序确保了组件间的依赖关系得到正确处理。
**章节来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L264-L330)
### 事件系统集成
Architecture基类通过事件总线实现了松耦合的组件通信:
```mermaid
classDiagram
class Architecture {
-IArchitectureLifecycle[] _lifecycleHooks
-IArchitecturePhaseAware[] _phaseAwareObjects
+RegisterLifecycleHook(hook) IArchitectureLifecycle
+NotifyPhase(phase) void
+NotifyPhaseAwareObjects(phase) void
}
class IArchitectureLifecycle {
<>
+OnPhase(phase, arch) void
}
class IArchitecturePhaseAware {
<>
+OnArchitecturePhase(phase) void
}
class EventBus {
+Send(event) void
+Register(handler) IUnRegister
+UnRegister(handler) void
}
Architecture --> IArchitectureLifecycle
Architecture --> IArchitecturePhaseAware
Architecture --> EventBus
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L189-L209)
**章节来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L189-L223)
## 依赖关系分析
### 组件间依赖关系
Architecture基类的依赖关系体现了清晰的分层架构:
```mermaid
graph TB
subgraph "外部依赖"
E1[IEnvironment]
L1[ILoggerFactoryProvider]
P1[ILogger]
end
subgraph "核心服务"
S1[IIocContainer]
S2[IEventBus]
S3[ICommandBus]
S4[IQueryBus]
S5[IAsyncQueryBus]
end
subgraph "架构组件"
A1[Architecture]
A2[ArchitectureContext]
A3[ArchitectureServices]
A4[ArchitectureConfiguration]
end
subgraph "应用组件"
C1[ISystem]
C2[IModel]
C3[IUtility]
C4[IArchitectureModule]
end
E1 --> A1
L1 --> A4
P1 --> A1
S1 --> A3
S2 --> A3
S3 --> A3
S4 --> A3
S5 --> A3
A1 --> A2
A1 --> A3
A1 --> A4
A1 --> C1
A1 --> C2
A1 --> C3
A1 --> C4
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L16)
- [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L1-L12)
### 依赖注入容器管理
Architecture基类通过IoC容器实现了组件的自动管理和依赖解析:
```mermaid
sequenceDiagram
participant Client as 客户端代码
participant Arch as Architecture
participant Container as IoC容器
participant Service as 服务实例
Client->>Arch : Context.GetService()
Arch->>Container : Get()
Container->>Container : 查找已缓存实例
Container->>Container : 创建新实例
Container-->>Arch : 返回服务实例
Arch-->>Client : 返回服务实例
Note over Container : 使用字典缓存避免重复创建
```
**图表来源**
- [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L31-L41)
**章节来源**
- [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L225)
- [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L17-L106)
## 性能考虑
### 内存管理优化
Architecture基类在内存管理方面采用了多项优化措施:
1. **组件去重机制**:使用HashSet确保同一组件不会被重复注册
2. **有序列表管理**:使用List保持组件注册的顺序一致性
3. **服务缓存**:ArchitectureContext使用字典缓存已获取的服务实例
4. **异步初始化**:支持异步组件初始化,避免阻塞主线程
### 并发安全性
架构基类在并发环境下表现稳定:
- **GameContext**:使用ConcurrentDictionary确保多线程安全
- **组件注册**:在Ready阶段后禁止注册,避免运行时修改
- **事件处理**:事件总线支持异步事件处理
## 故障排除指南
### 常见问题及解决方案
#### 初始化失败问题
当架构初始化失败时,系统会自动进入FailedInitialization阶段:
```mermaid
flowchart TD
InitError[初始化异常] --> SetFailed["设置FailedInitialization阶段"]
SetFailed --> SendEvent["发送初始化失败事件"]
SendEvent --> Cleanup["清理部分初始化的组件"]
Cleanup --> Continue["继续执行后续流程"]
Continue --> DestroyCall["Destroy()调用"]
DestroyCall --> Destroying["进入Destroying阶段"]
Destroying --> Destroyed["进入Destroyed阶段"]
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L494-L504)
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L513-L523)
#### 组件注册时机错误
如果在Ready阶段后尝试注册组件,会抛出InvalidOperationException:
```mermaid
flowchart TD
RegAttempt[组件注册请求] --> CheckPhase["检查当前阶段"]
CheckPhase --> |Ready阶段后| CheckFlag["检查AllowLateRegistration标志"]
CheckFlag --> |false| ThrowError["抛出InvalidOperationException"]
CheckFlag --> |true| Proceed["允许注册"]
CheckPhase --> |Ready阶段前| Proceed
ThrowError --> LogError["记录错误日志"]
LogError --> End([结束])
Proceed --> Register["执行注册"]
Register --> End
```
**图表来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L407-L414)
**章节来源**
- [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L492-L524)
## 结论
GFramework架构基类通过精心设计的架构模式和实现细节,为游戏开发提供了一个强大而灵活的基础框架。其核心优势包括:
1. **清晰的职责分离**:通过接口定义和组合模式实现了高度的模块化
2. **严格的生命周期管理**:确保组件按正确的顺序初始化和销毁
3. **灵活的配置系统**:支持运行时配置和环境适配
4. **强大的事件系统**:实现了松耦合的组件通信机制
5. **优秀的可扩展性**:为开发者提供了丰富的扩展点
通过遵循本文档的最佳实践,开发者可以充分利用Architecture基类的强大功能,构建高质量的游戏架构。
## 附录
### 最佳实践使用示例
#### 基本架构实现
```csharp
// 继承Architecture基类
public class MyGameArchitecture : Architecture
{
// 实现抽象Init方法
protected override void Init()
{
// 注册游戏组件
RegisterModel(new GameStateModel());
RegisterSystem(new GameManagerSystem());
RegisterUtility(new SaveGameManager());
// 可选:注册架构模块
InstallModule(new UISystemModule());
}
}
```
#### 自定义配置
```csharp
// 创建自定义配置
var config = new ArchitectureConfiguration
{
LoggerProperties = new LoggerProperties
{
LoggerFactoryProvider = new FileLoggerFactoryProvider()
},
ArchitectureProperties = new ArchitectureProperties
{
AllowLateRegistration = true,
StrictPhaseValidation = false
}
};
// 使用自定义配置创建架构
var arch = new MyGameArchitecture(config);
```
#### 异步组件支持
```csharp
public class AsyncTestArchitecture : TestArchitectureBase
{
protected override void Init()
{
// 注册异步模型
RegisterModel(new AsyncLoadModel());
// 注册异步系统
RegisterSystem(new AsyncResourceLoader());
base.Init();
}
}
```
**章节来源**
- [TestArchitectureBase.cs](file://GFramework.Core.Tests/architecture/TestArchitectureBase.cs#L41-L57)
- [SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs#L14-L19)
- [AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs#L14-L21)