From d1cdac8082261c8b1972a2b4420027a4382db339 Mon Sep 17 00:00:00 2001 From: GeWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Wed, 11 Feb 2026 14:44:46 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E5=92=8C=E4=BB=A3=E7=A0=81=E5=9D=97=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复了文档中多个文件的链接指向,统一使用相对路径格式 - 移除了代码块中的语言标识符以保持一致性 - 更新了存储模块文档中的类名显示方式 - 修正了架构文档中的跨文档引用链接 - 调整了事件、命令、查询等核心模块的文档链接结构 - 规范化了所有代码示例的格式和引用方式 --- GFramework.Core.Abstractions/README.md | 2 +- GFramework.Core/README.md | 2 +- GFramework.Game/README.md | 2 +- GFramework.Game/storage/ReadMe.md | 18 ++++---- GFramework.Godot/README.md | 2 +- README.md | 12 ++--- docs/.vitepress/cache/deps/_metadata.json | 12 ++--- docs/zh-CN/core/architecture.md | 12 ++--- docs/zh-CN/core/command.md | 12 ++--- docs/zh-CN/core/controller.md | 26 +++++------ docs/zh-CN/core/environment.md | 12 ++--- docs/zh-CN/core/events.md | 38 ++++++++-------- docs/zh-CN/core/extensions.md | 54 +++++++++++------------ docs/zh-CN/core/ioc.md | 42 +++++++++--------- docs/zh-CN/core/logging.md | 10 ++--- docs/zh-CN/core/model.md | 14 +++--- docs/zh-CN/core/property.md | 24 +++++----- docs/zh-CN/core/query.md | 22 ++++----- docs/zh-CN/core/rule.md | 20 ++++----- docs/zh-CN/core/system.md | 26 +++++------ docs/zh-CN/core/utility.md | 28 ++++++------ 21 files changed, 194 insertions(+), 196 deletions(-) diff --git a/GFramework.Core.Abstractions/README.md b/GFramework.Core.Abstractions/README.md index dce62d6..f0f4ad4 100644 --- a/GFramework.Core.Abstractions/README.md +++ b/GFramework.Core.Abstractions/README.md @@ -23,4 +23,4 @@ GFramework 框架的抽象层定义模块,包含所有核心组件的接口定 ## 详细文档 -参见 [docs/core/](../docs/core/) 目录下的详细文档。 +参见 [docs/zh-CN/abstractions/](../docs/zh-CN/abstractions/) 目录下的详细文档。 diff --git a/GFramework.Core/README.md b/GFramework.Core/README.md index c4fb096..71339f4 100644 --- a/GFramework.Core/README.md +++ b/GFramework.Core/README.md @@ -28,4 +28,4 @@ GFramework 框架的核心模块,提供MVC架构的基础设施。 ## 详细文档 -参见 [docs/core/](../docs/core/) 目录下的详细文档。 +参见 [docs/zh-CN/core/](../docs/zh-CN/core/) 目录下的详细文档。 diff --git a/GFramework.Game/README.md b/GFramework.Game/README.md index e3e255e..0efaa23 100644 --- a/GFramework.Game/README.md +++ b/GFramework.Game/README.md @@ -13,4 +13,4 @@ GFramework 框架的游戏通用模块,提供游戏开发常用的功能。 ## 详细文档 -参见 [docs/game/](../docs/game/) 目录下的详细文档。 +参见 [docs/zh-CN/game/](../docs/zh-CN/game/) 目录下的详细文档。 diff --git a/GFramework.Game/storage/ReadMe.md b/GFramework.Game/storage/ReadMe.md index cc9a917..5f90a5b 100644 --- a/GFramework.Game/storage/ReadMe.md +++ b/GFramework.Game/storage/ReadMe.md @@ -1,11 +1,11 @@ # GFramework 存储模块使用指南 -本模块提供了基于文件系统的存储功能,包括两个主要类:[FileStorage](./FileStorage.cs) -和 [ScopedStorage](./ScopedStorage.cs)。 +本模块提供了基于文件系统的存储功能,包括两个主要类:FileStorage +和 ScopedStorage。 ## FileStorage -[FileStorage](./FileStorage.cs) 是一个基于文件系统的存储实现,它将数据以序列化形式保存到磁盘上的指定目录。 +FileStorage 是一个基于文件系统的存储实现,它将数据以序列化形式保存到磁盘上的指定目录。 ### 特性 @@ -59,7 +59,7 @@ storage.WriteAsync("player_score", 1200); ## ScopedStorage -[ScopedStorage](./ScopedStorage.cs) 是一个装饰器模式的实现,它为所有存储键添加前缀,从而实现逻辑分组和命名空间隔离。 +ScopedStorage 是一个装饰器模式的实现,它为所有存储键添加前缀,从而实现逻辑分组和命名空间隔离。 ### 特性 @@ -122,13 +122,13 @@ settingsStorage.Write("level", "high"); ## 注意事项 -1. **序列化器选择**:确保使用的 [ISerializer](../GFramework.Game.Abstractions/serializer/ISerializer.cs) +1. **序列化器选择**:确保使用的 ISerializer 实现能够正确处理你要存储的数据类型。 -2. **错误处理**:[FileStorage](./FileStorage.cs) 的 `Read(string key)` 方法会在键不存在时抛出异常,可以使用 +2. **错误处理**:FileStorage 的 `Read(string key)` 方法会在键不存在时抛出异常,可以使用 `Read(string key, T defaultValue)` 来避免异常。 -3. **线程安全**:[FileStorage](./FileStorage.cs) 通过细粒度锁机制保证线程安全,每个键都有独立的锁,因此不同键的操作可以并发执行。 +3. **线程安全**:FileStorage 通过细粒度锁机制保证线程安全,每个键都有独立的锁,因此不同键的操作可以并发执行。 4. **文件权限**:确保应用程序对指定的存储目录有读写权限。 -5. **路径安全**:[FileStorage](./FileStorage.cs) 会自动防止路径遍历攻击,因此键不能包含 `..`,并且特殊字符会被替换为下划线。 +5. **路径安全**:FileStorage 会自动防止路径遍历攻击,因此键不能包含 `..`,并且特殊字符会被替换为下划线。 6. **存储键格式**:键可以包含 `/` 作为分隔符,这将被转换为相应的目录层级,例如 `"player/profile"` 会存储在 `player/profile.dat` 文件中。 -7. **异步操作**:尽管异步读写操作使用了异步IO,但仍会使用锁来保证对同一键的并发访问安全。 +7. **异步操作**:尽管异步读写操作使用了异步IO,但仍会使用锁来保证对同一键的并发访问安全。 \ No newline at end of file diff --git a/GFramework.Godot/README.md b/GFramework.Godot/README.md index 4f2bd47..e19f4ae 100644 --- a/GFramework.Godot/README.md +++ b/GFramework.Godot/README.md @@ -16,4 +16,4 @@ GFramework 框架的 Godot 引擎集成模块,提供Godot特定的功能和扩 ## 详细文档 -参见 [docs/godot/](../docs/godot/) 目录下的详细文档。 +参见 [docs/zh-CN/godot/](../docs/zh-CN/godot/) 目录下的详细文档。 diff --git a/README.md b/README.md index dcc7db8..f2f187d 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Godot](https://img.shields.io/badge/Godot-4.6-green)](https://godotengine.org/) [![.NET](https://img.shields.io/badge/.NET-6.0+-purple)](https://dotnet.microsoft.com/) [![License](https://img.shields.io/badge/License-Apache%202.0-blue)](LICENSE) -[![zread](https://img.shields.io/badge/Ask_Zread-_.svg?style=flat-square&color=00b0aa&labelColor=000000&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS4zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS4zMTM1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K&logoColor=ffffff)](https://zread.ai/GeWuYou/GFramework) +[![zread](https://img.shields.io/badge/Ask_Zread-_.svg?style=flat-square&color=00b0aa&labelColor=000000&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQuOTYxNTYgMS42MDAxSDIuMjQxNTZDMS44ODgxIDEuNjAwMSAxLjYwMTU2IDEuODg2NjQgMS42MDE1NiAyLjI0MDFWNC45NjAxQzEuNjAxNTYgNS4zMTM1NiAxLjg4ODEgNS42MDAxIDIuMjQxNTYgNS42MDAxSDQuOTYxNTZDNS5zMTUwMiA1LjYwMDEgNS42MDE1NiA1LjMxMzU2IDUuNjAxNTYgNC45NjAxVjIuMjQwMUM1LjYwMTU2IDEuODg2NjQgNS4zMTUwMiAxLjYwMDEgNC45NjE1NiAxLjYwMDFaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00Ljk2MTU2IDEwLjM5OTlIMi4yNDE1NkMxLjg4ODEgMTAuMzk5OSAxLjYwMTU2IDEwLjY4NjQgMS42MDE1NiAxMS4wMzk5VjEzLjc1OTlDMS42MDE1NiAxNC4xMTM0IDEuODg4MSAxNC4zOTk5IDIuMjQxNTYgMTQuMzk5OUg0Ljk2MTU2QzUuMzE1MDIgMTQuMzk5OSA1LjYwMTU2IDE0LjExMzQgNS42MDE1NiAxMy43NTk5VjExLjAzOTlDNS42MDE1NiAxMC42ODY0IDUuMzE1MDIgMTAuMzk5OSA0Ljk2MTU2IDEwLjM5OTlaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik0xMy43NTg0IDEuNjAwMUgxMS4wMzg0QzEwLjY4NSAxLjYwMDEgMTAuMzk4NCAxLjg4NjY0IDEwLjM5ODQgMi4yNDAxVjQuOTYwMUMxMC4zOTg0IDUuMzEzNTYgMTAuNjg1IDUuNjAwMSAxMS4wMzg0IDUuNjAwMUgxMy43NTg0QzE0LjExMTkgNS42MDAxIDE0LjM5ODQgNS4zMTM1NiAxNC4zOTg0IDQuOTYwMVYyLjI0MDFDMTQuMzk4NCAxLjg4NjY0IDE0LjExMTkgMS42MDAxIDEzLjc1ODQgMS42MDAxWiIgZmlsbD0iI2ZmZiIvPgo8cGF0aCBkPSJNNCAxMkwxMiA0TDQgMTJaIiBmaWxsPSIjZmZmIi8%2BCjxwYXRoIGQ9Ik00IDEyTDEyIDQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8L3N2Zz4K&logoColor=ffffff)](https://zread.ai/GeWuYou/GFramework) --- ## 项目简介 @@ -37,11 +37,11 @@ GFramework 采用清晰分层与模块化设计,强调: ## 文档导航 -- 入门教程:[`docs/tutorials/getting-started.md`](docs/tutorials/getting-started.md) -- Godot 集成:[`docs/tutorials/godot-integration.md`](docs/tutorials/godot-integration.md) -- 进阶模式:[`docs/tutorials/advanced-patterns.md`](docs/tutorials/advanced-patterns.md) -- 最佳实践:[`docs/best-practices/architecture-patterns.md`](docs/best-practices/architecture-patterns.md) -- API 参考:[`docs/api-reference/`](docs/api-reference/) +- 入门教程:[`docs/zh-CN/tutorials/getting-started.md`](docs/zh-CN/tutorials/getting-started.md) +- Godot 集成:[`docs/zh-CN/godot/index.md`](docs/zh-CN/godot/index.md) +- 进阶模式:[`docs/zh-CN/core/index.md`](docs/zh-CN/core/index.md) +- 最佳实践:[`docs/zh-CN/best-practices/architecture-patterns.md`](docs/zh-CN/best-practices/architecture-patterns.md) +- API 参考:[`docs/zh-CN/api-reference/`](docs/zh-CN/api-reference/) > 如果你更偏好按模块阅读,建议从各子项目 `README.md` 开始,再回到 `docs/` 查阅专题文档。 diff --git a/docs/.vitepress/cache/deps/_metadata.json b/docs/.vitepress/cache/deps/_metadata.json index 44658bc..10267af 100644 --- a/docs/.vitepress/cache/deps/_metadata.json +++ b/docs/.vitepress/cache/deps/_metadata.json @@ -1,25 +1,25 @@ { - "hash": "74ecdc37", - "configHash": "1c302118", + "hash": "6e3217ee", + "configHash": "ff691e50", "lockfileHash": "42b6a898", - "browserHash": "b3e735e5", + "browserHash": "d5f41485", "optimized": { "vue": { "src": "../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "5c6400c6", + "fileHash": "ed53cbd8", "needsInterop": false }, "vitepress > @vue/devtools-api": { "src": "../../../node_modules/@vue/devtools-api/dist/index.js", "file": "vitepress___@vue_devtools-api.js", - "fileHash": "673694b5", + "fileHash": "e7446b18", "needsInterop": false }, "vitepress > @vueuse/core": { "src": "../../../node_modules/@vueuse/core/dist/index.js", "file": "vitepress___@vueuse_core.js", - "fileHash": "7fde5c45", + "fileHash": "6dc472ff", "needsInterop": false } }, diff --git a/docs/zh-CN/core/architecture.md b/docs/zh-CN/core/architecture.md index 43638b4..d76fcbf 100644 --- a/docs/zh-CN/core/architecture.md +++ b/docs/zh-CN/core/architecture.md @@ -79,7 +79,7 @@ Task InitializeAsync(); ## 核心类 -### [`Architecture`](Architecture.cs) +### [`Architecture`](./architecture.md) 架构基类,实现了 `IArchitecture` 接口,提供完整的架构功能实现。 @@ -268,7 +268,7 @@ public void InstallModule(IArchitectureModule module) **使用示例:** -```csharp +``` // 定义模块 public class NetworkModule : IArchitectureModule { @@ -301,7 +301,7 @@ public void RegisterLifecycleHook(IArchitectureLifecycle hook) **使用示例:** -```csharp +``` // 定义生命周期钩子 public class PerformanceMonitorHook : IArchitectureLifecycle { @@ -342,7 +342,7 @@ public ArchitecturePhase CurrentPhase { get; } **使用示例:** -```csharp +``` var architecture = new GameArchitecture(); // 检查架构是否已就绪 @@ -372,7 +372,7 @@ public IArchitectureContext Context { get; } **使用示例:** -```csharp +``` // 通过 Context 访问服务 var context = architecture.Context; var eventBus = context.EventBus; @@ -383,7 +383,7 @@ var environment = context.Environment; **高级特性:** -``csharp +``` // 1. 使用自定义配置 var config = new ArchitectureConfiguration(); var architecture = new GameArchitecture(configuration: config); diff --git a/docs/zh-CN/core/command.md b/docs/zh-CN/core/command.md index 701281d..abb6ef0 100644 --- a/docs/zh-CN/core/command.md +++ b/docs/zh-CN/core/command.md @@ -6,7 +6,7 @@ Command 包实现了命令模式(Command Pattern),用于封装用户操作 ## 核心接口 -### 1. [`ICommand`](ICommand.cs) +### 1. [`ICommand`](./command.md) 无返回值命令接口,定义了命令的基本契约。 @@ -16,7 +16,7 @@ Command 包实现了命令模式(Command Pattern),用于封装用户操作 void Execute(); // 执行命令 ``` -### 2. [`ICommand`](ICommand.cs) +### 2. [`ICommand`](./command.md) 带返回值的命令接口,用于需要返回执行结果的命令。 @@ -28,9 +28,9 @@ TResult Execute(); // 执行命令并返回结果 ## 核心类 -### 1. [`AbstractCommand`](AbstractCommand.cs) +### 1. [`AbstractCommand`](./command.md) -无返回值命令的抽象基类,提供了命令的基础实现。它继承自 [ContextAwareBase](file:///d:/Project/Rider/GFramework/GFramework.Core.Abstractions/rule/IContextAware.cs#L4-L28) +无返回值命令的抽象基类,提供了命令的基础实现。它继承自 [ContextAwareBase](./rule.md) ,具有上下文感知能力。 **使用示例:** @@ -83,9 +83,9 @@ public class GameController : IController } ``` -### 2. [`AbstractCommand`](AbstractCommand.cs) +### 2. [`AbstractCommand`](./command.md) -带返回值命令的抽象基类,同样继承自 [ContextAwareBase](file:///d:/Project/Rider/GFramework/GFramework.Core.Abstractions/rule/IContextAware.cs#L4-L28)。 +带返回值命令的抽象基类,同样继承自 [ContextAwareBase](./rule.md)。 **使用示例:** diff --git a/docs/zh-CN/core/controller.md b/docs/zh-CN/core/controller.md index a511a14..1a30073 100644 --- a/docs/zh-CN/core/controller.md +++ b/docs/zh-CN/core/controller.md @@ -8,18 +8,18 @@ Controller 包定义了控制器(Controller)的接口规范。控制器是 M ## 核心接口 -### [`IController`](IController.cs) +### [`IController`](./controller.md) 控制器接口,定义了控制器需要实现的所有功能契约。 **继承的能力接口:** -- [`ICanSendCommand`](../command/ICanSendCommand.cs) - 可发送命令 -- [`ICanGetSystem`](../system/ICanGetSystem.cs) - 可获取系统 -- [`ICanGetModel`](../model/ICanGetModel.cs) - 可获取模型 -- [`ICanRegisterEvent`](../events/ICanRegisterEvent.cs) - 可注册事件 -- [`ICanSendQuery`](../query/ICanSendQuery.cs) - 可发送查询 -- [`ICanGetUtility`](../utility/ICanGetUtility.cs) - 可获取工具 +- [`ICanSendCommand`](./command.md) - 可发送命令 +- [`ICanGetSystem`](./system.md) - 可获取系统 +- [`ICanGetModel`](./model.md) - 可获取模型 +- [`ICanRegisterEvent`](./events.md) - 可注册事件 +- [`ICanSendQuery`](./query.md) - 可发送查询 +- [`ICanGetUtility`](./utility.md) - 可获取工具 **能力说明:** @@ -110,7 +110,7 @@ public class PlayerController : IController ### UI 控制器示例 -```csharp +``csharp // UI 面板控制器 public class MainMenuController : IController { @@ -160,7 +160,7 @@ public class MainMenuController : IController ### 复杂交互控制器 -```csharp +``csharp // 战斗控制器 public class CombatController : IController { @@ -269,7 +269,7 @@ public class CombatController : IController ### 事件注销 -```csharp +``csharp public class MyController : IController { [Inject] private IArchitecture _architecture; @@ -321,7 +321,7 @@ public class MyController : IController ### 数据绑定模式 -```csharp +``csharp public class ScoreController : IController { [Inject] private IArchitecture _architecture; @@ -344,7 +344,7 @@ public class ScoreController : IController ### 状态机模式 -```csharp +``csharp public class PlayerStateController : IController { [Inject] private IArchitecture _architecture; @@ -376,7 +376,7 @@ public class PlayerStateController : IController 在 Godot 项目中,可以使用 GFramework.Godot 提供的扩展: -```csharp +``csharp using GFramework.Godot; public partial class GodotPlayerController : Node, IController diff --git a/docs/zh-CN/core/environment.md b/docs/zh-CN/core/environment.md index 338664c..49d7913 100644 --- a/docs/zh-CN/core/environment.md +++ b/docs/zh-CN/core/environment.md @@ -23,7 +23,7 @@ void Initialize(); // 初始化环境 ## 核心类 -### [`EnvironmentBase`](EnvironmentBase.cs) +### [`EnvironmentBase`](./environment.md) 环境基础抽象类,实现了 IEnvironment 接口,提供环境值的存储和获取功能。 @@ -68,7 +68,7 @@ public abstract class EnvironmentBase : ContextAwareBase, IEnvironment } ``` -### [`DefaultEnvironment`](DefaultEnvironment.cs) +### [`DefaultEnvironment`](./environment.md) 默认环境实现类,继承自 EnvironmentBase。 @@ -90,7 +90,7 @@ public class DefaultEnvironment : EnvironmentBase ### 1. 定义自定义环境 -```csharp +``` public class GameEnvironment : EnvironmentBase { public override string Name { get; } = "Game"; @@ -112,7 +112,7 @@ public class GameEnvironment : EnvironmentBase ### 2. 在架构中使用环境 -```csharp +``` public class GameArchitecture : Architecture { protected override void Init() @@ -130,7 +130,7 @@ public class GameArchitecture : Architecture ### 3. 使用环境值 -```csharp +``` public class NetworkSystem : AbstractSystem { private string _serverAddress; @@ -183,7 +183,7 @@ public class NetworkSystem : AbstractSystem ## 错误示例 -```csharp +``` // ❌ 错误:获取必需值但不存在 public class BadExampleSystem : AbstractSystem { diff --git a/docs/zh-CN/core/events.md b/docs/zh-CN/core/events.md index 6e4684e..eb97bdd 100644 --- a/docs/zh-CN/core/events.md +++ b/docs/zh-CN/core/events.md @@ -6,7 +6,7 @@ Events 包提供了一套完整的事件系统,实现了观察者模式(Obse ## 核心接口 -### 1. [`IEvent`](file:///d:/Project/Rider/GFramework/GFramework.Core.Abstractions/events/IEvent.cs#L7-L11) +### 1. [`IEvent`](./events.md) 基础事件接口,定义了事件注册的基本功能。 @@ -16,7 +16,7 @@ Events 包提供了一套完整的事件系统,实现了观察者模式(Obse IUnRegister Register(Action onEvent); // 注册事件处理函数 ``` -### 2. [`IUnRegister`](file:///d:/Project/Rider/GFramework/GFramework.Core.Abstractions/events/IUnRegister.cs#L6-L10) +### 2. [`IUnRegister`](./events.md) 注销接口,用于取消事件注册。 @@ -26,9 +26,7 @@ IUnRegister Register(Action onEvent); // 注册事件处理函数 void UnRegister(); // 执行注销操作 ``` -### 3. [ - -`IUnRegisterList`](file:///d:/Project/Rider/GFramework/GFramework.Core.Abstractions/events/IUnRegisterList.cs#L6-L10) +### 3. [`IUnRegisterList`](./events.md) 注销列表接口,用于批量管理注销对象。 @@ -38,7 +36,7 @@ void UnRegister(); // 执行注销操作 IList UnregisterList { get; } // 获取注销列表 ``` -### 4. [`IEventBus`](file:///d:/Project/Rider/GFramework/GFramework.Core.Abstractions/events/IEventBus.cs#L6-L22) +### 4. [`IEventBus`](./events.md) 事件总线接口,提供基于类型的事件发送和注册。 @@ -52,7 +50,7 @@ void Send() where T : new(); // 发送事件(自动创建实例 ## 核心类 -### 1. [`EasyEvent`](EasyEvent.cs) +### 1. [`EasyEvent`](./events.md) 无参事件类,支持注册、注销和触发无参事件。 @@ -75,7 +73,7 @@ onClicked.Trigger(); unregister.UnRegister(); ``` -### 2. [`Event`](EasyEventGeneric.cs) +### 2. [`Event`](./events.md) 单参数泛型事件类,支持一个参数的事件。 @@ -95,7 +93,7 @@ onScoreChanged.Register(newScore => onScoreChanged.Trigger(100); ``` -### 3. [`Event`](EasyEventGeneric.cs) +### 3. [`Event`](./events.md) 双参数泛型事件类。 @@ -226,7 +224,7 @@ unregisterList.UnRegisterAll(); ### 定义事件类 -```csharp +``csharp // 简单事件 public struct GameStartedEvent { } @@ -249,7 +247,7 @@ public struct LevelCompletedEvent ### Model 中发送事件 -```csharp +``csharp public class PlayerModel : AbstractModel { public BindableProperty Health { get; } = new(100); @@ -275,7 +273,7 @@ public class PlayerModel : AbstractModel ### System 中发送事件 -```csharp +``csharp public class CombatSystem : AbstractSystem { protected override void OnInit() { } @@ -297,7 +295,7 @@ public class CombatSystem : AbstractSystem ### Controller 中注册事件 -```csharp +``csharp public partial class GameController : Node, IController { private IUnRegisterList _unregisterList = new UnRegisterList(); @@ -345,7 +343,7 @@ public partial class GameController : Node, IController ### 1. 事件链式组合 -```csharp +``csharp // 使用 Or 组合多个事件 var onAnyDamage = new OrEvent() .Or(onPhysicalDamage) @@ -360,7 +358,7 @@ onAnyDamage.Register(() => ### 2. 事件过滤 -```csharp +``csharp // 只处理高伤害事件 this.RegisterEvent(e => { @@ -373,7 +371,7 @@ this.RegisterEvent(e => ### 3. 事件转发 -```csharp +``csharp public class EventBridge : AbstractSystem { protected override void OnInit() @@ -393,7 +391,7 @@ public class EventBridge : AbstractSystem ### 4. 临时事件监听 -```csharp +``csharp public class TutorialController : Node, IController { public override void _Ready() @@ -411,7 +409,7 @@ public class TutorialController : Node, IController ### 5. 条件事件 -```csharp +``csharp public class AchievementSystem : AbstractSystem { private int _killCount = 0; @@ -439,7 +437,7 @@ public class AchievementSystem : AbstractSystem ### 使用 UnRegisterList -```csharp +``csharp public class MyController : Node, IController { // 统一管理所有注销对象 @@ -465,7 +463,7 @@ public class MyController : Node, IController ### 使用 Godot 节点生命周期 -```csharp +``csharp public override void _Ready() { // 当节点退出场景树时自动注销 diff --git a/docs/zh-CN/core/extensions.md b/docs/zh-CN/core/extensions.md index 9188751..a0d6a9f 100644 --- a/docs/zh-CN/core/extensions.md +++ b/docs/zh-CN/core/extensions.md @@ -6,10 +6,10 @@ Extensions 包提供了一系列扩展方法,简化了框架各个接口的使 ## 扩展方法类别 -### 1. ContextAware 扩展 ([`ContextAwareExtensions.cs`](ContextAwareExtensions.cs)) +### 1. ContextAware 扩展 ([`ContextAwareExtensions.cs`](./extensions.md)) -为 [`IContextAware`](../../GFramework.Core.Abstractions/rule/IContextAware.cs) -提供扩展方法,允许直接从实现了 [IContextAware](file:///d:/Project/Rider/GFramework/GFramework.Core.Abstractions/rule/IContextAware.cs) +为 [`IContextAware`](./rule.md) +提供扩展方法,允许直接从实现了 [IContextAware](./rule.md) 的对象获取架构组件。 #### GetSystem 扩展方法 @@ -81,7 +81,7 @@ public class GameModel : AbstractModel, IContextAware #### SendCommand 扩展方法 -```csharp +``` // 发送无返回值的命令 public static void SendCommand(this IContextAware contextAware, ICommand command) @@ -107,13 +107,13 @@ public class GameController : IController #### SendQuery 扩展方法 -```csharp +``` public static TResult SendQuery(this IContextAware contextAware, IQuery query) ``` **使用示例:** -```csharp +``` public class InventoryController : IController { public void ShowInventory() @@ -129,7 +129,7 @@ public class InventoryController : IController #### SendEvent 扩展方法 -```csharp +``` // 发送无参事件 public static void SendEvent(this IContextAware contextAware) where T : new() @@ -139,7 +139,7 @@ public static void SendEvent(this IContextAware contextAware, T e) where T : **使用示例:** -```csharp +``` public class PlayerModel : AbstractModel, IContextAware { public void TakeDamage(int damage) @@ -164,13 +164,13 @@ public class PlayerModel : AbstractModel, IContextAware #### RegisterEvent 扩展方法 -```csharp +``` public static IUnRegister RegisterEvent(this IContextAware contextAware, Action handler) ``` **使用示例:** -```csharp +``` public class GameController : IController { private IUnRegisterList _unregisterList = new UnRegisterList(); @@ -192,13 +192,13 @@ public class GameController : IController #### UnRegisterEvent 扩展方法 -```csharp +``` public static void UnRegisterEvent(this IContextAware contextAware, Action onEvent) ``` ### GetEnvironment 扩展方法 -```csharp +``` public static T? GetEnvironment(this IContextAware contextAware) where T : class public static IEnvironment GetEnvironment(this IContextAware contextAware) ``` @@ -209,7 +209,7 @@ public static IEnvironment GetEnvironment(this IContextAware contextAware) #### IfType 扩展方法 -```csharp +``` // 最简单的类型判断 public static bool IfType(this object obj, Action action) @@ -230,7 +230,7 @@ public static void IfType( **使用示例:** -```csharp +``` object obj = new MyRule(); // 简单类型判断 @@ -254,7 +254,7 @@ obj.IfType( #### IfType`` 扩展方法 -```csharp +``` public static TResult? IfType( this object obj, Func func @@ -263,7 +263,7 @@ public static TResult? IfType( **使用示例:** -```csharp +``` object obj = new MyRule { Name = "TestRule" }; string? name = obj.IfType(r => r.Name); @@ -271,7 +271,7 @@ string? name = obj.IfType(r => r.Name); #### As 和 Do 扩展方法 -```csharp +``` // 安全类型转换 public static T? As(this object obj) where T : class @@ -281,7 +281,7 @@ public static T Do(this T obj, Action action) **使用示例:** -```csharp +``` // 安全类型转换 obj.As() ?.Execute(); @@ -302,7 +302,7 @@ obj.As() #### SwitchType 扩展方法 -```csharp +``` public static void SwitchType( this object obj, params (Type type, Action action)[] handlers @@ -311,7 +311,7 @@ public static void SwitchType( **使用示例:** -```csharp +``` obj.SwitchType( (typeof(IRule), o => HandleRule((IRule)o)), (typeof(ISystem), o => HandleSystem((ISystem)o)), @@ -325,13 +325,13 @@ obj.SwitchType( #### OrEventExtensions -```csharp +``` public static OrEvent Or(this IEvent self, IEvent e) ``` **使用示例:** -```csharp +``` // 组合多个事件:当任意一个触发时执行 var onAnyInput = onKeyPressed.Or(onMouseClicked).Or(onTouchDetected); @@ -352,7 +352,7 @@ var onAnyDamage = onPhysicalDamage #### UnRegisterListExtension -```csharp +``` // 添加到注销列表 public static void AddToUnregisterList(this IUnRegister self, IUnRegisterList unRegisterList) @@ -363,7 +363,7 @@ public static void UnRegisterAll(this IUnRegisterList self) **使用示例:** -```csharp +``` public class ComplexController : IController { private IUnRegisterList _unregisterList = new UnRegisterList(); @@ -396,7 +396,7 @@ public class ComplexController : IController ### Controller 示例 -```csharp +``` public partial class GameplayController : IController { private IUnRegisterList _unregisterList = new UnRegisterList(); @@ -448,7 +448,7 @@ public partial class GameplayController : IController ### Command 示例 -```csharp +``` public class ComplexGameCommand : AbstractCommand { protected override void OnExecute() @@ -473,7 +473,7 @@ public class ComplexGameCommand : AbstractCommand ### System 示例 -```csharp +``` public class AchievementSystem : AbstractSystem { protected override void OnInit() diff --git a/docs/zh-CN/core/ioc.md b/docs/zh-CN/core/ioc.md index 060744a..462aafd 100644 --- a/docs/zh-CN/core/ioc.md +++ b/docs/zh-CN/core/ioc.md @@ -148,9 +148,9 @@ public IReadOnlyList GetAllSorted(Comparison comparison) where T : clas ### Architecture 中的应用 -IoC 容器是 [`Architecture`](../architecture/Architecture.cs) 类的核心组件,用于管理所有的 System、Model 和 Utility。 +IoC 容器是 [`Architecture`](./architecture.md) 类的核心组件,用于管理所有的 System、Model 和 Utility。 -```csharp +``` public abstract class Architecture : IArchitecture { // 内置 IoC 容器 @@ -174,7 +174,7 @@ public abstract class Architecture : IArchitecture ### 注册组件到容器 -```csharp +``` public class GameArchitecture : Architecture { protected override void Init() @@ -198,7 +198,7 @@ public class GameArchitecture : Architecture ### 从容器获取组件 -```csharp +``` // 通过扩展方法间接使用 IoC 容器 public class PlayerController : IController { @@ -218,7 +218,7 @@ public class PlayerController : IController ### 内部实现 -```csharp +``` public class IocContainer { // 使用字典存储类型到实例集合的映射 @@ -313,7 +313,7 @@ IocContainer.Get() ### 基础使用 -```csharp +``` // 1. 创建容器 var container = new IocContainer(); @@ -328,7 +328,7 @@ service.DoSomething(); ### 接口和实现分离 -```csharp +``` // 定义接口 public interface IDataService { @@ -365,7 +365,7 @@ dataService.SaveData("game data"); ### 注册多个实现 -```csharp +``` var container = new IocContainer(); // 注册多个相同接口的不同实现 @@ -385,7 +385,7 @@ var allServices = container.GetAll(); // 返回两个实例的列 检查容器中是否包含指定类型的实例。 -```csharp +``` public bool Contains() where T : class ``` @@ -399,7 +399,7 @@ public bool Contains() where T : class **使用示例:** -```csharp +``` var container = new IocContainer(); // 检查服务是否已注册 @@ -425,7 +425,7 @@ if (!container.Contains()) 判断容器中是否包含某个具体的实例对象。 -```csharp +``` public bool ContainsInstance(object instance) ``` @@ -439,7 +439,7 @@ public bool ContainsInstance(object instance) **使用示例:** -```csharp +``` var container = new IocContainer(); var service = new MyService(); @@ -469,13 +469,13 @@ if (!container.ContainsInstance(anotherService)) 清空容器中的所有实例。 -```csharp +``` public void Clear() ``` **使用示例:** -```csharp +``` var container = new IocContainer(); // 注册多个服务 @@ -544,7 +544,7 @@ Console.WriteLine($"Contains IService2: {container.Contains()}"); // ### 本框架的 IocContainer -```csharp +``` // 简单直接 var container = new IocContainer(); container.Register(new MyService()); @@ -563,7 +563,7 @@ var service = container.Get(); ### 完整的 IoC 框架(如 Autofac、Zenject) -```csharp +``` // 复杂但功能强大 var builder = new ContainerBuilder(); builder.RegisterType().As().SingleInstance(); @@ -586,7 +586,7 @@ var controller = container.Resolve(); ### 1. 在架构初始化时注册 -```csharp +``` public class GameArchitecture : Architecture { protected override void Init() @@ -609,7 +609,7 @@ public class GameArchitecture : Architecture ### 2. 使用接口类型注册 -```csharp +``` // ❌ 不推荐:直接使用实现类 RegisterSystem(new ConcreteSystem()); var system = GetSystem(); @@ -621,7 +621,7 @@ var system = GetSystem(); ### 3. 避免运行时频繁注册 -``` csharp +``` // ❌ 不好:游戏运行时频繁注册 void Update() { @@ -637,7 +637,7 @@ protected override void Init() ### 4. 检查 null 返回值 -```csharp +``` // 获取可能不存在的服务 var service = container.Get(); if (service != null) @@ -652,7 +652,7 @@ else ### 5. 合理使用容器冻结 -```csharp +``` // 在架构初始化完成后冻结容器,防止意外修改 protected override void OnInit() { diff --git a/docs/zh-CN/core/logging.md b/docs/zh-CN/core/logging.md index 4a6ecdf..fd581d2 100644 --- a/docs/zh-CN/core/logging.md +++ b/docs/zh-CN/core/logging.md @@ -6,7 +6,7 @@ Logging 包提供了灵活的日志系统,支持多级别日志记录。默认 ## 核心接口 -### [ILogger](ILogger.cs) +### [ILogger](./logging.md) 日志记录器接口,定义了日志记录的基本功能。 @@ -62,7 +62,7 @@ void Fatal(string msg, Exception t); string Name(); ``` -### [ILoggerFactory](ILoggerFactory.cs) +### [ILoggerFactory](./logging.md) 日志工厂接口,用于创建日志记录器实例。 @@ -72,7 +72,7 @@ string Name(); ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info); ``` -### [ILoggerFactoryProvider](ILoggerFactoryProvider.cs) +### [ILoggerFactoryProvider](./logging.md) 日志工厂提供程序接口,用于获取日志工厂。 @@ -83,7 +83,7 @@ ILoggerFactory GetLoggerFactory(); ILogger CreateLogger(string name); ``` -### [LogLevel](LogLevel.cs) +### [LogLevel](./logging.md) 日志级别枚举。 @@ -266,7 +266,7 @@ public class PlayerModel : AbstractModel ### 4. 自定义日志级别 -```csharp +``` public class DebugLogger : AbstractLogger { public DebugLogger() : base("Debug", LogLevel.Debug) diff --git a/docs/zh-CN/core/model.md b/docs/zh-CN/core/model.md index ddf6f80..71224f5 100644 --- a/docs/zh-CN/core/model.md +++ b/docs/zh-CN/core/model.md @@ -7,14 +7,14 @@ Model 包定义了数据模型层的接口和基类。Model 是 MVC 架构中的 ## 核心接口 -### [`IModel`](IModel.cs) +### [`IModel`](./model.md) 模型接口,定义了模型的基本行为和功能。 **继承的能力接口:** -- [`IContextAware`](../rule/IContextAware.cs) - 上下文感知接口 -- [`ILogAware`](../rule/ILogAware.cs) - 日志感知接口 +- [`IContextAware`](./rule.md) - 上下文感知接口 +- [`ILogAware`](./rule.md) - 日志感知接口 **核心方法:** @@ -23,16 +23,16 @@ void Init(); // 初始化模型 void OnArchitecturePhase(ArchitecturePhase phase); // 处理架构阶段事件 ``` -### [`ICanGetModel`](ICanGetModel.cs) +### [`ICanGetModel`](./model.md) -标记接口,表示实现者可以获取模型。继承自 [`IBelongToArchitecture`](../rule/IBelongToArchitecture.cs)。 +标记接口,表示实现者可以获取模型。继承自 [`IBelongToArchitecture`](./rule.md)。 ## 核心类 -### [`AbstractModel`](AbstractModel.cs) +### [`AbstractModel`](./model.md) 抽象模型基类,实现IModel接口,提供模型的基础实现。该类继承自[ -`ContextAwareBase`](file:///d:/Project/Rider/GFramework/GFramework.Core/rule/ContextAwareBase.cs#L11-L37),提供了上下文感知能力。 +`ContextAwareBase`](./rule.md),提供了上下文感知能力。 **使用示例:** diff --git a/docs/zh-CN/core/property.md b/docs/zh-CN/core/property.md index 464d4a6..4bbc90c 100644 --- a/docs/zh-CN/core/property.md +++ b/docs/zh-CN/core/property.md @@ -6,7 +6,7 @@ Property 包提供了可绑定属性(BindableProperty)的实现,支持属 ## 核心接口 -### [`IReadonlyBindableProperty`](IReadonlyBindableProperty.cs) +### [`IReadonlyBindableProperty`](./property.md) 只读可绑定属性接口,提供属性值的读取和变更监听功能。 @@ -26,7 +26,7 @@ IUnRegister RegisterWithInitValue(Action action); void UnRegister(Action onValueChanged); ``` -### [`IBindableProperty`](IBindableProperty.cs) +### [`IBindableProperty`](./property.md) 可绑定属性接口,继承自只读接口,增加了修改能力。 @@ -42,7 +42,7 @@ void SetValueWithoutEvent(T newValue); ## 核心类 -### [`BindableProperty`](BindableProperty.cs) +### [`BindableProperty`](./property.md) 可绑定属性的完整实现。 @@ -86,7 +86,7 @@ var position = new BindableProperty(Vector3.Zero) .WithComparer((a, b) => a.DistanceTo(b) < 0.01f); // 距离小于0.01认为相等 ``` -### [`BindablePropertyUnRegister`](BindablePropertyUnRegister.cs) +### [`BindablePropertyUnRegister`](./property.md) 可绑定属性的注销器,负责清理监听。 @@ -174,7 +174,7 @@ public partial class PlayerUI : Control, IController ### 1. 双向绑定 -```csharp +``` // Model public class SettingsModel : AbstractModel { @@ -203,7 +203,7 @@ public partial class VolumeSlider : HSlider, IController ### 2. 计算属性 -```csharp +``` public class PlayerModel : AbstractModel { public BindableProperty Health { get; } = new(100); @@ -228,7 +228,7 @@ public class PlayerModel : AbstractModel ### 3. 属性验证 -```csharp +``` public class PlayerModel : AbstractModel { private BindableProperty _health = new(100); @@ -252,7 +252,7 @@ public class PlayerModel : AbstractModel ### 4. 条件监听 -```csharp +``` public class CombatController : Node, IController { public override void _Ready() @@ -279,7 +279,7 @@ public class CombatController : Node, IController ### 1. 避免频繁触发 -```csharp +``` // 使用 SetValueWithoutEvent 批量修改 public void LoadPlayerData(SaveData data) { @@ -295,7 +295,7 @@ public void LoadPlayerData(SaveData data) ### 2. 自定义比较器 -```csharp +``` // 避免浮点数精度问题导致的频繁触发 var position = new BindableProperty() .WithComparer((a, b) => a.DistanceTo(b) < 0.001f); @@ -305,7 +305,7 @@ var position = new BindableProperty() ### 值变化检测 -```csharp +``` // 使用 EqualityComparer.Default 进行比较 if (!EqualityComparer.Default.Equals(value, MValue)) { @@ -316,7 +316,7 @@ if (!EqualityComparer.Default.Equals(value, MValue)) ### 事件触发机制 -```csharp +``` // 当值变化时触发所有注册的回调 _mOnValueChanged?.Invoke(value); ``` diff --git a/docs/zh-CN/core/query.md b/docs/zh-CN/core/query.md index 2da3bed..e80ebd9 100644 --- a/docs/zh-CN/core/query.md +++ b/docs/zh-CN/core/query.md @@ -19,7 +19,7 @@ TResult Do(); // 执行查询并返回结果 ## 核心类 -### [`AbstractQuery`](AbstractQuery.cs) +### [`AbstractQuery`](./query.md) 抽象查询基类,提供了查询的基础实现。它接受一个泛型输入参数 TInput,该参数必须实现 IQueryInput 接口。 @@ -34,7 +34,7 @@ public abstract class AbstractQuery(TInput input) : ContextAwar } ``` -### [`EmptyQueryInput`](EmptyQueryInput.cs) +### [`EmptyQueryInput`](./query.md) 空查询输入类,用于表示不需要任何输入参数的查询操作。 @@ -47,7 +47,7 @@ public sealed class EmptyQueryInput : IQueryInput } ``` -### [`QueryBus`](QueryBus.cs) +### [`QueryBus`](./query.md) 查询总线实现,负责执行查询并返回结果。 @@ -156,7 +156,7 @@ public partial class ShopUI : Control, IController ### 3. 在 System 中使用 -```csharp +``csharp public class CombatSystem : AbstractSystem { protected override void OnInit() @@ -185,7 +185,7 @@ this.RegisterEvent(OnEnemyAttack); ### 1. 带参数的复杂查询 -```csharp +``csharp // 查询指定范围内的敌人列表 public class GetEnemiesInRangeQuery : AbstractQuery> { @@ -209,7 +209,7 @@ var enemies = this.SendQuery(new GetEnemiesInRangeQuery ### 2. 组合查询 -```csharp +``csharp // 查询玩家是否可以使用技能 public class CanUseSkillQuery : AbstractQuery { @@ -256,7 +256,7 @@ public string SkillId { get; set; } ### 3. 聚合数据查询 -```csharp +``csharp // 查询玩家战斗力 public class GetPlayerPowerQuery : AbstractQuery { @@ -295,7 +295,7 @@ public class GetPlayerInfoQuery : AbstractQuery ### 4. 跨 System 查询 -```csharp +``csharp // 在 AI System 中查询玩家状态 public class EnemyAISystem : AbstractSystem { @@ -346,7 +346,7 @@ protected override void OnInit() { } - **返回值**:有返回值 - **示例**:获取金币数量、检查技能冷却、查询玩家位置 -```csharp +``csharp // ❌ 错误:在 Query 中修改状态 public class BadQuery : AbstractQuery { @@ -392,7 +392,7 @@ public class AddGoldCommand : AbstractCommand ### 1. 缓存查询结果 -```csharp +``csharp // 在 Model 中缓存复杂计算 public class PlayerModel : AbstractModel { @@ -424,7 +424,7 @@ private int? _cachedPower; ### 2. 批量查询 -```csharp +``csharp // 一次查询多个数据,而不是多次单独查询 public class GetMultipleItemCountsQuery : AbstractQuery> { diff --git a/docs/zh-CN/core/rule.md b/docs/zh-CN/core/rule.md index 87eb445..c644b6a 100644 --- a/docs/zh-CN/core/rule.md +++ b/docs/zh-CN/core/rule.md @@ -33,7 +33,7 @@ public interface IContextAware ## 核心类 -### [`ContextAwareBase`](ContextAwareBase.cs) +### [`ContextAwareBase`](./rule.md) 上下文感知基类,实现了 IContextAware 接口,为需要感知架构上下文的类提供基础实现。 @@ -77,7 +77,7 @@ IContextAware (上下文感知接口) ### 1. Component 继承 ContextAwareBase -```csharp +``csharp // 组件通过继承 ContextAwareBase 获得架构上下文访问能力 public partial class PlayerController : Node, IController { @@ -99,7 +99,7 @@ public partial class PlayerController : Node, IController ### 2. Command 继承 AbstractCommand (IContextAware) -```csharp +``csharp // Command 继承 AbstractCommand,自动成为 IContextAware public class BuyItemCommand : AbstractCommand { @@ -124,7 +124,7 @@ public class BuyItemCommand : AbstractCommand ### 3. 自定义组件遵循规则 -```csharp +``csharp // 自定义管理器遵循框架规则,继承 ContextAwareBase public class SaveManager : ContextAwareBase { @@ -151,7 +151,7 @@ public class SaveManager : ContextAwareBase ### 1. 组件注册规则 -```csharp +``csharp public class GameArchitecture : Architecture { protected override void Init() @@ -166,7 +166,7 @@ public class GameArchitecture : Architecture ### 2. Command/Query 自动注入规则 -```csharp +``csharp // Controller 中发送 Command public class ShopUI : Control, IController { @@ -200,7 +200,7 @@ public class BuyItemCommand : AbstractCommand Rule 接口体现了依赖注入(DI)的思想: -```csharp +``csharp // 接口定义了"需要什么" public interface IContextAware { @@ -225,7 +225,7 @@ public static class CanSendExtensions Rule 接口遵循接口隔离原则,每个接口职责单一: -```csharp +``csharp // ❌ 不好的设计:一个大接口包含所有能力 public interface IBigInterface { @@ -247,7 +247,7 @@ public interface ICanSendCommand { ... } // 只负责发送 Command 通过接口组合实现不同能力: -```csharp +``csharp // Controller 需要获取 Model 和发送 Command public interface IController : ICanGetModel, ICanGetSystem, ICanSendCommand, ICanSendQuery, ICanRegisterEvent @@ -271,7 +271,7 @@ public interface ISystem : IContextAware, ICanGetModel, ICanGetUtility, ICanGetS ### 自定义规则接口 -```csharp +``csharp // 定义新的规则接口 public interface ICanAccessDatabase : IBelongToArchitecture { diff --git a/docs/zh-CN/core/system.md b/docs/zh-CN/core/system.md index cb8f421..e9c2c47 100644 --- a/docs/zh-CN/core/system.md +++ b/docs/zh-CN/core/system.md @@ -6,7 +6,7 @@ System 包定义了业务逻辑层(Business Logic Layer)。System 负责处 ## 核心接口 -### [`ICanGetSystem`](ICanGetSystem.cs) +### [`ICanGetSystem`](./system.md) 标记接口,表示该类型可以获取其他 System。 @@ -16,7 +16,7 @@ System 包定义了业务逻辑层(Business Logic Layer)。System 负责处 public interface ICanGetSystem : IBelongToArchitecture ``` -### [`ISystem`](ISystem.cs) +### [`ISystem`](./system.md) System 接口,定义了系统的基本行为。 @@ -39,7 +39,7 @@ void OnArchitecturePhase(ArchitecturePhase phase); // 处理架构阶段事件 ## 核心类 -### [`AbstractSystem`](AbstractSystem.cs) +### [`AbstractSystem`](./system.md) 抽象 System 基类,提供了 System 的基础实现。继承自 ContextAwareBase,具有上下文感知能力。 @@ -60,7 +60,7 @@ public abstract class AbstractSystem : ContextAwareBase, ISystem ### 1. 定义 System -```csharp +``` // 战斗系统 public class CombatSystem : AbstractSystem { @@ -115,7 +115,7 @@ public class CombatSystem : AbstractSystem ### 2. 注册 System -```csharp +``` public class GameArchitecture : Architecture { protected override void Init() @@ -134,7 +134,7 @@ public class GameArchitecture : Architecture ### 3. 在其他组件中获取 System -```csharp +``` // 在 Controller 中 public partial class GameController : Node, IController { @@ -163,7 +163,7 @@ public class StartBattleCommand : AbstractCommand ### 1. 事件驱动的 System -```csharp +``` public class InventorySystem : AbstractSystem { protected override void OnInit() @@ -229,7 +229,7 @@ public class InventorySystem : AbstractSystem ### 2. 定时更新的 System -```csharp +``` public class BuffSystem : AbstractSystem { private List _activeBuffs = new(); @@ -281,7 +281,7 @@ public class BuffSystem : AbstractSystem ### 3. 跨 System 协作 -```csharp +``` public class QuestSystem : AbstractSystem { protected override void OnInit() @@ -366,7 +366,7 @@ public class RewardSystem : AbstractSystem ### 4. 管理复杂状态机 -```csharp +``` public class GameStateSystem : AbstractSystem { private GameState _currentState = GameState.MainMenu; @@ -445,7 +445,7 @@ public class GameStateSystem : AbstractSystem - **特点**:主动,响应事件 - **示例**:CombatSystem、QuestSystem -```csharp +``` // ✅ 正确的职责划分 // Model: 存储数据 @@ -493,7 +493,7 @@ public class CombatSystem : AbstractSystem ### 1. 避免频繁的 GetModel/GetSystem -```csharp +``` // ❌ 不好:每次都获取 private void OnUpdate(GameUpdateEvent e) { @@ -518,7 +518,7 @@ private void OnUpdate(GameUpdateEvent e) ### 2. 批量处理 -```csharp +``` public class ParticleSystem : AbstractSystem { private List _particles = new(); diff --git a/docs/zh-CN/core/utility.md b/docs/zh-CN/core/utility.md index 711484c..92ecc2c 100644 --- a/docs/zh-CN/core/utility.md +++ b/docs/zh-CN/core/utility.md @@ -13,7 +13,7 @@ Utility 标记接口,所有工具类都应实现此接口。 **接口定义:** -```csharp +``csharp public interface IUtility { // 标记接口,无方法定义 @@ -26,7 +26,7 @@ public interface IUtility **接口定义:** -```csharp +``csharp public interface IContextUtility : IUtility { void Init(); // 初始化上下文工具 @@ -35,7 +35,7 @@ public interface IContextUtility : IUtility ## 核心类 -### [`AbstractContextUtility`](AbstractContextUtility.cs) +### [`AbstractContextUtility`](./utility.md) 抽象上下文工具类,提供上下文相关的通用功能实现。继承自 ContextAwareBase 并实现 IContextUtility 接口。 @@ -139,7 +139,7 @@ public class TimeUtility : IUtility ### 2. 注册 Utility -```csharp +``csharp public class GameArchitecture : Architecture { protected override void Init() @@ -154,7 +154,7 @@ public class GameArchitecture : Architecture ### 3. 使用 Utility -```csharp +``csharp // 在 System 中使用 public class SaveSystem : AbstractSystem { @@ -223,7 +223,7 @@ public class MovePlayerCommand : AbstractCommand ### 1. 序列化/反序列化工具 -```csharp +``csharp public class JsonUtility : IUtility { public string Serialize(T obj) @@ -254,7 +254,7 @@ public class JsonUtility : IUtility ### 2. 随机数工具 -```csharp +``csharp public class RandomUtility : IUtility { private Random _random = new Random(); @@ -294,7 +294,7 @@ public class RandomUtility : IUtility ### 3. 字符串工具 -```csharp +``csharp public class StringUtility : IUtility { public string Truncate(string text, int maxLength, string suffix = "...") @@ -327,7 +327,7 @@ public class StringUtility : IUtility ### 4. 加密工具 -```csharp +``csharp public class EncryptionUtility : IUtility { private const string EncryptionKey = "YourSecretKey123"; @@ -367,7 +367,7 @@ public class EncryptionUtility : IUtility ### 5. 对象池工具 -```csharp +``csharp public class ObjectPoolUtility : IUtility { private Dictionary> _pools = new(); @@ -410,7 +410,7 @@ public class ObjectPoolUtility : IUtility ### 6. 日志工具 -```csharp +``csharp public class LogUtility : IUtility { public enum LogLevel @@ -503,7 +503,7 @@ public class CombatSystem : AbstractSystem ## 错误示例 -```csharp +``csharp // ❌ 错误:Utility 中存储状态 public class BadUtility : IUtility { @@ -543,7 +543,7 @@ public class IdGeneratorSystem : AbstractSystem ### 1. 缓存计算结果 -```csharp +``csharp public class PathfindingUtility : IUtility { private Dictionary<(Vector3, Vector3), List> _pathCache = new(); @@ -582,7 +582,7 @@ public class PathfindingUtility : IUtility ### 2. 对象复用 -```csharp +``csharp public class CollectionUtility : IUtility { private List _tempList = new();