# 代码组织规范
**本文档引用的文件**
- [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.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.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.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/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs)
- [GFramework.Core/logging/AbstractLogger.cs](file://GFramework.Core/logging/AbstractLogger.cs)
- [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs)
- [GFramework.Core/events/EasyEvent.cs](file://GFramework.Core/events/EasyEvent.cs)
- [GFramework.Core/property/BindableProperty.cs](file://GFramework.Core/property/BindableProperty.cs)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件为 GFramework 代码组织规范最佳实践文档,旨在为团队提供统一的文件结构、命名约定、注释标准、代码格式化和代码审查检查清单,确保代码质量、可维护性和一致性。
## 项目结构
GFramework 采用模块化架构,按功能域和层次结构组织代码,核心模块包括:
- GFramework.Core:平台无关的核心框架,包含架构、事件、命令、查询、日志、IoC 等基础设施
- GFramework.Core.Abstractions:核心接口定义,确保抽象与实现分离
- GFramework.Game:游戏特定功能抽象,如资产管理、存储系统、序列化
- GFramework.Godot:Godot 引擎集成模块,提供节点扩展、信号系统、日志桥接等
- GFramework.SourceGenerators:源代码生成器,提升开发效率和类型安全
```mermaid
graph TB
subgraph "核心模块"
Core["GFramework.Core
平台无关核心"]
Abstractions["GFramework.Core.Abstractions
接口定义"]
end
subgraph "游戏模块"
Game["GFramework.Game
游戏抽象"]
GameAbstractions["GFramework.Game.Abstractions
游戏接口"]
end
subgraph "平台集成"
Godot["GFramework.Godot
Godot集成"]
SourceGen["GFramework.SourceGenerators
源码生成器"]
end
Core --> Abstractions
Game --> GameAbstractions
Godot --> Core
SourceGen --> Core
```
**图表来源**
- [README.md](file://README.md#L235-L253)
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L42-L56)
**章节来源**
- [README.md](file://README.md#L1-L320)
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L1-L508)
## 核心组件
GFramework 的核心组件遵循分层架构,各层职责明确:
- View/UI:用户界面层
- Controller:控制层,处理用户输入
- System:业务逻辑层
- Model:数据层,存储游戏状态
- Utility:工具层,提供无状态工具
- Command/Query/Event:横切关注点,跨层操作
```mermaid
graph TB
View["View/UI
用户界面"] --> Controller["Controller
控制层"]
Controller --> System["System
业务逻辑"]
System --> Model["Model
数据层"]
Model --> Utility["Utility
工具层"]
Controller --> Command["Command
命令"]
Controller --> Query["Query
查询"]
System --> Event["Event
事件"]
Model --> Event
Utility --> Event
```
**图表来源**
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L42-L108)
**章节来源**
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L40-L108)
## 架构概览
GFramework 采用 CQRS(命令查询职责分离)和事件驱动架构,通过依赖注入容器管理组件生命周期,实现松耦合和高内聚。
```mermaid
classDiagram
class Architecture {
+Initialize()
+InitializeAsync()
+RegisterSystem()
+RegisterModel()
+RegisterUtility()
+InstallModule()
+Destroy()
}
class IArchitecture {
<>
+Initialize()
+Destroy()
+RegisterSystem()
+RegisterModel()
+RegisterUtility()
+InstallModule()
+RegisterLifecycleHook()
}
class IocContainer {
+RegisterSingleton()
+RegisterPlurality()
+RegisterSystem()
+Register()
+Get()
+GetAll()
+Freeze()
}
class AbstractCommand {
<>
+Execute()
#OnExecute()
}
class AbstractQuery {
<>
+Do()
#OnDo()
}
class AbstractModel {
<>
+Init()
#OnInit()
}
Architecture ..|> IArchitecture
Architecture --> IocContainer : "使用"
AbstractCommand --> Architecture : "上下文感知"
AbstractQuery --> Architecture : "上下文感知"
AbstractModel --> Architecture : "上下文感知"
```
**图表来源**
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569)
- [GFramework.Core.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68)
- [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373)
- [GFramework.Core/command/AbstractCommand.cs](file://GFramework.Core/command/AbstractCommand.cs#L11-L53)
- [GFramework.Core/query/AbstractQuery.cs](file://GFramework.Core/query/AbstractQuery.cs#L11-L29)
- [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34)
**章节来源**
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569)
- [GFramework.Core.Abstractions/architecture/IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L1-L68)
## 详细组件分析
### 文件结构建议
基于现有代码组织,建议采用以下文件夹结构:
#### 按功能域组织
```
GFramework.Core/
├── architecture/ # 架构核心
├── command/ # 命令模式
├── query/ # 查询模式
├── events/ # 事件系统
├── model/ # 数据模型
├── system/ # 业务系统
├── utility/ # 工具类
├── property/ # 可绑定属性
├── ioc/ # 依赖注入
├── logging/ # 日志系统
├── environment/ # 环境配置
└── extensions/ # 扩展方法
```
#### 按层次结构组织
```
GFramework.Core/
├── infrastructure/ # 基础设施层
├── application/ # 应用服务层
├── domain/ # 领域模型层
└── presentation/ # 表现层
```
### 命名约定规范
#### 类名规范
- 抽象基类使用 `Abstract` 前缀:`AbstractCommand`, `AbstractModel`
- 具体实现类使用功能描述:`PlayerModel`, `CombatSystem`
- 接口使用 `I` 前缀:`IModel`, `ISystem`, `ICommand`
#### 方法名规范
- 公共方法使用动词或动词短语:`Initialize()`, `RegisterSystem()`
- 私有方法使用动词过去分词:`OnInitialize()`, `ValidateInput()`
- 事件处理器使用 `On` 前缀:`OnPlayerDamaged`, `OnSystemReady`
#### 变量名规范
- 局部变量使用驼峰命名:`playerModel`, `systemCount`
- 字段使用下划线前缀:`_logger`, `_context`
- 常量使用帕斯卡命名:`MaxHealth`, `DefaultDelay`
#### 命名空间规范
- 使用项目根命名空间:`GFramework.Core.architecture`
- 按模块分层:`GFramework.Core.Abstractions`, `GFramework.Game`
**章节来源**
- [GFramework.Core/command/AbstractCommand.cs](file://GFramework.Core/command/AbstractCommand.cs#L11-L53)
- [GFramework.Core/query/AbstractQuery.cs](file://GFramework.Core/query/AbstractQuery.cs#L11-L29)
- [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34)
### 代码注释标准
#### XML 文档注释规范
- 类和接口:使用三斜杠注释,包含摘要、参数、返回值说明
- 方法:包含功能描述、参数说明、异常说明
- 属性:包含描述和使用注意事项
- 泛型:说明类型参数含义
#### 注释最佳实践
- 保持注释简洁明了,避免冗余
- 重点说明设计决策和业务逻辑
- 使用代码示例说明复杂用法
- 定期更新过时注释
### 代码格式化建议
#### 缩进和空行
- 使用 4 个空格进行缩进
- 方法之间保留一个空行
- 逻辑块之间保留空行
- 条件语句和循环体保持一致缩进
#### 代码布局
- 属性和字段按访问修饰符分组
- 构造函数和析构函数放在类的顶部
- 私有方法按功能分组放置
- 常量定义在类的最顶部
#### 命名一致性
- 保持命名约定在整个项目中一致
- 避免使用缩写,除非是广泛接受的缩写
- 接口和实现类使用相同的前缀约定
**章节来源**
- [GFramework.Core/logging/AbstractLogger.cs](file://GFramework.Core/logging/AbstractLogger.cs#L6-L493)
### 代码审查检查清单
#### 架构层面
- [ ] 是否遵循分层架构原则
- [ ] 是否正确使用依赖注入
- [ ] 是否实现松耦合设计
- [ ] 是否有清晰的职责分离
#### 代码质量
- [ ] 是否有适当的单元测试覆盖
- [ ] 是否遵循单一职责原则
- [ ] 是否避免重复代码
- [ ] 是否使用适当的异常处理
#### 性能考虑
- [ ] 是否有内存泄漏风险
- [ ] 是否有性能瓶颈
- [ ] 是否正确使用异步编程
- [ ] 是否有不必要的对象创建
#### 安全性
- [ ] 是否处理了空引用
- [ ] 是否验证了输入参数
- [ ] 是否有安全漏洞
- [ ] 是否正确处理了敏感数据
**章节来源**
- [GFramework.Core/README.md](file://GFramework.Core/README.md#L347-L444)
## 依赖分析
```mermaid
graph TB
subgraph "核心依赖"
Architecture["Architecture
核心调度器"]
IocContainer["IocContainer
依赖注入"]
EventBus["EventBus
事件系统"]
LoggerFactory["LoggerFactory
日志工厂"]
end
subgraph "组件依赖"
Command["Command
命令"]
Query["Query
查询"]
Model["Model
模型"]
System["System
系统"]
Utility["Utility
工具"]
end
Architecture --> IocContainer
Architecture --> EventBus
Architecture --> LoggerFactory
Architecture --> Command
Architecture --> Query
Architecture --> Model
Architecture --> System
Architecture --> Utility
```
**图表来源**
- [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L52-L88)
- [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/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L164-L183)
- [GFramework.Core/logging/AbstractLogger.cs](file://GFramework.Core/logging/AbstractLogger.cs#L455-L493)
## 结论
通过实施本代码组织规范,团队可以建立一致的开发标准,提高代码质量和可维护性。建议定期回顾和更新规范,确保适应项目发展需求。
## 附录
### 快速参考表
#### 命名约定速查
- 抽象类:`Abstract*`
- 接口:`I*`
- 命令:`*Command`
- 查询:`*Query`
- 模型:`*Model`
- 系统:`*System`
- 工具:`*Utility`
#### 代码审查要点
- 架构一致性
- 代码可读性
- 性能影响
- 安全性考虑
- 测试覆盖率