From 4f0182854352b240da9c9d28c22af728472f2e0c Mon Sep 17 00:00:00 2001
From: GeWuYou <95328647+GeWuYou@users.noreply.github.com>
Date: Tue, 6 Jan 2026 12:06:08 +0800
Subject: [PATCH] =?UTF-8?q?refactor(architecture):=20=E9=87=8D=E6=9E=84?=
=?UTF-8?q?=E6=9E=B6=E6=9E=84=E5=9F=BA=E7=B1=BB=E5=92=8C=E6=A8=A1=E5=9E=8B?=
=?UTF-8?q?=E5=AE=9E=E7=8E=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 移除 Architecture 类中关于业务操作方法的注释说明
- 更新 AsyncTestModel 继承 AbstractModel 并移除上下文设置相关方法
- 添加 ITestModel 接口定义用于测试模型
- 在 SyncArchitectureTests 中添加事件接收和取消注册功能测试
- 创建 TestEvent 和 EmptyEvent 用于事件系统测试
- 修改 TestModel 继承 AbstractModel 并实现 ITestModel 接口
- 添加 TestQuery 类用于测试查询操作功能
- [skip ci]
---
GFramework.Core.Tests/events/TestEvent.cs | 8 +++
GFramework.Core.Tests/model/AsyncTestModel.cs | 28 ++------
GFramework.Core.Tests/model/ITestModel.cs | 8 +++
GFramework.Core.Tests/model/TestModel.cs | 24 +++----
GFramework.Core.Tests/query/TestQuery.cs | 28 ++++++++
.../tests/SyncArchitectureTests.cs | 65 +++++++++++++++++++
GFramework.Core/architecture/Architecture.cs | 1 -
7 files changed, 125 insertions(+), 37 deletions(-)
create mode 100644 GFramework.Core.Tests/events/TestEvent.cs
create mode 100644 GFramework.Core.Tests/model/ITestModel.cs
create mode 100644 GFramework.Core.Tests/query/TestQuery.cs
diff --git a/GFramework.Core.Tests/events/TestEvent.cs b/GFramework.Core.Tests/events/TestEvent.cs
new file mode 100644
index 0000000..d277fc7
--- /dev/null
+++ b/GFramework.Core.Tests/events/TestEvent.cs
@@ -0,0 +1,8 @@
+namespace GFramework.Core.Tests.events;
+
+public sealed class TestEvent
+{
+ public int ReceivedValue { get; init; }
+}
+
+public sealed class EmptyEvent;
\ No newline at end of file
diff --git a/GFramework.Core.Tests/model/AsyncTestModel.cs b/GFramework.Core.Tests/model/AsyncTestModel.cs
index 0994f7d..2d0e80d 100644
--- a/GFramework.Core.Tests/model/AsyncTestModel.cs
+++ b/GFramework.Core.Tests/model/AsyncTestModel.cs
@@ -1,16 +1,14 @@
using GFramework.Core.Abstractions.architecture;
using GFramework.Core.Abstractions.enums;
-using GFramework.Core.Abstractions.model;
+using GFramework.Core.model;
namespace GFramework.Core.Tests.model;
///
/// 异步测试模型类,实现了IModel和IAsyncInitializable接口
///
-public sealed class AsyncTestModel : IModel, IAsyncInitializable
+public sealed class AsyncTestModel : AbstractModel, IAsyncInitializable
{
- private IArchitectureContext _context = null!;
-
///
/// 获取模型是否已初始化的标志
///
@@ -36,24 +34,6 @@ public sealed class AsyncTestModel : IModel, IAsyncInitializable
throw new InvalidOperationException("Sync Init should not be called");
}
- ///
- /// 设置架构上下文
- ///
- /// 架构上下文对象
- public void SetContext(IArchitectureContext context)
- {
- _context = context;
- }
-
- ///
- /// 获取架构上下文
- ///
- /// 架构上下文对象
- public IArchitectureContext GetContext()
- {
- return _context;
- }
-
///
/// 处理架构阶段事件
///
@@ -61,4 +41,8 @@ public sealed class AsyncTestModel : IModel, IAsyncInitializable
public void OnArchitecturePhase(ArchitecturePhase phase)
{
}
+
+ protected override void OnInit()
+ {
+ }
}
\ No newline at end of file
diff --git a/GFramework.Core.Tests/model/ITestModel.cs b/GFramework.Core.Tests/model/ITestModel.cs
new file mode 100644
index 0000000..af86350
--- /dev/null
+++ b/GFramework.Core.Tests/model/ITestModel.cs
@@ -0,0 +1,8 @@
+using GFramework.Core.Abstractions.model;
+
+namespace GFramework.Core.Tests.model;
+
+public interface ITestModel : IModel
+{
+ int GetCurrentXp { get; }
+}
\ No newline at end of file
diff --git a/GFramework.Core.Tests/model/TestModel.cs b/GFramework.Core.Tests/model/TestModel.cs
index 5e8e83a..26da6fa 100644
--- a/GFramework.Core.Tests/model/TestModel.cs
+++ b/GFramework.Core.Tests/model/TestModel.cs
@@ -1,15 +1,14 @@
-using GFramework.Core.Abstractions.architecture;
-using GFramework.Core.Abstractions.enums;
-using GFramework.Core.Abstractions.model;
+using GFramework.Core.Abstractions.enums;
+using GFramework.Core.model;
namespace GFramework.Core.Tests.model;
///
/// 测试模型类,用于框架测试目的
///
-public sealed class TestModel : IModel
+public sealed class TestModel : AbstractModel, ITestModel
{
- private IArchitectureContext _context = null!;
+ public const int DefaultXp = 5;
///
/// 获取模型是否已初始化的状态
@@ -24,17 +23,14 @@ public sealed class TestModel : IModel
Initialized = true;
}
- public void SetContext(IArchitectureContext context)
- {
- _context = context;
- }
-
- public IArchitectureContext GetContext()
- {
- return _context;
- }
public void OnArchitecturePhase(ArchitecturePhase phase)
{
}
+
+ public int GetCurrentXp { get; } = DefaultXp;
+
+ protected override void OnInit()
+ {
+ }
}
\ No newline at end of file
diff --git a/GFramework.Core.Tests/query/TestQuery.cs b/GFramework.Core.Tests/query/TestQuery.cs
new file mode 100644
index 0000000..9dd62fc
--- /dev/null
+++ b/GFramework.Core.Tests/query/TestQuery.cs
@@ -0,0 +1,28 @@
+using GFramework.Core.Abstractions.query;
+using GFramework.Core.extensions;
+using GFramework.Core.query;
+using GFramework.Core.Tests.model;
+
+namespace GFramework.Core.Tests.query;
+
+///
+/// 测试查询类,用于执行测试查询操作
+///
+/// 测试查询输入参数
+public class TestQuery(TestQueryInput input) : AbstractQuery(input)
+{
+ ///
+ /// 执行查询操作的重写方法
+ ///
+ /// 测试查询输入参数
+ /// 返回固定的整数值42
+ protected override int OnDo(TestQueryInput input)
+ {
+ return this.GetModel()!.GetCurrentXp;
+ }
+}
+
+///
+/// 测试查询输入类,实现查询输入接口
+///
+public sealed class TestQueryInput : IQueryInput;
\ No newline at end of file
diff --git a/GFramework.Core.Tests/tests/SyncArchitectureTests.cs b/GFramework.Core.Tests/tests/SyncArchitectureTests.cs
index 67686fe..8417126 100644
--- a/GFramework.Core.Tests/tests/SyncArchitectureTests.cs
+++ b/GFramework.Core.Tests/tests/SyncArchitectureTests.cs
@@ -1,6 +1,7 @@
using GFramework.Core.Abstractions.enums;
using GFramework.Core.architecture;
using GFramework.Core.Tests.architecture;
+using GFramework.Core.Tests.events;
using GFramework.Core.Tests.model;
using GFramework.Core.Tests.system;
using NUnit.Framework;
@@ -137,4 +138,68 @@ public class SyncArchitectureTests : ArchitectureTestsBase
AssertInitializationFailed();
}
+
+ ///
+ /// 测试事件是否能够被正确接收和处理
+ ///
+ ///
+ /// 该测试验证了事件系统的注册和发送功能,确保事件能够被正确传递给注册的处理器
+ ///
+ [Test]
+ public void Event_Should_Be_Received()
+ {
+ Architecture!.Initialize();
+ var context = Architecture.Context;
+
+ var receivedValue = 0;
+ const int tagetValue = 100;
+ // 注册事件处理器,将接收到的值赋给receivedValue变量
+ context.RegisterEvent(e => { receivedValue = e.ReceivedValue; });
+
+ // 发送测试事件
+ context.SendEvent(new TestEvent
+ {
+ ReceivedValue = tagetValue
+ });
+
+ Assert.That(receivedValue, Is.EqualTo(tagetValue));
+ }
+
+ ///
+ /// 测试事件取消注册功能是否正常工作
+ ///
+ ///
+ /// 该测试验证了事件处理器的取消注册功能,确保取消注册后事件处理器不再被调用
+ ///
+ [Test]
+ public void Event_UnRegister_Should_Work()
+ {
+ Architecture!.Initialize();
+ var context = Architecture.Context;
+
+ var count = 0;
+
+ // 注册事件处理器并获取取消注册对象
+ var unRegister = context.RegisterEvent(Handler);
+
+ // 发送第一个事件,此时处理器应该被调用
+ context.SendEvent(new EmptyEvent());
+
+ // 验证事件处理器被调用了一次
+ Assert.That(count, Is.EqualTo(1), "Handler should be called once before unregistration");
+
+ // 取消注册事件处理器
+ unRegister.UnRegister();
+
+ // 发送第二个事件,此时处理器不应该被调用
+ context.SendEvent(new EmptyEvent());
+
+ // 验证取消注册后,计数没有增加
+ Assert.That(count, Is.EqualTo(1), "Handler should not be called after unregistration");
+
+ void Handler(EmptyEvent _)
+ {
+ count++;
+ }
+ }
}
\ No newline at end of file
diff --git a/GFramework.Core/architecture/Architecture.cs b/GFramework.Core/architecture/Architecture.cs
index 9330462..32f7156 100644
--- a/GFramework.Core/architecture/Architecture.cs
+++ b/GFramework.Core/architecture/Architecture.cs
@@ -18,7 +18,6 @@ namespace GFramework.Core.architecture;
///
/// 架构基类,提供系统、模型、工具等组件的注册与管理功能。
/// 专注于生命周期管理、初始化流程控制和架构阶段转换。
-/// 不直接提供业务操作方法,业务操作通过 ArchitectureRuntime 提供。
///
public abstract class Architecture(
IArchitectureConfiguration? configuration = null,