mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-23 03:04:29 +08:00
refactor(architecture): 移除架构生命周期事件发送功能
- 从 Architecture.cs 中移除所有 EventBus.Send 事件发送调用 - 删除 ArchitectureEvents.cs 文件及其相关事件定义 - 移除架构销毁开始、销毁完成和初始化失败事件的发送逻辑 - 更新测试代码移除对已删除事件的依赖
This commit is contained in:
parent
7314bf03d0
commit
2d15184afe
@ -42,7 +42,6 @@ public abstract class TestArchitectureBase : Architecture
|
||||
{
|
||||
InitCalled = true;
|
||||
_postRegistrationHook?.Invoke(this);
|
||||
Context.RegisterEvent<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => { ReadyEventFired = true; });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -1,173 +0,0 @@
|
||||
using GFramework.Core.events;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace GFramework.Core.Tests.events;
|
||||
|
||||
/// <summary>
|
||||
/// ArchitectureEvents类的单元测试
|
||||
/// 测试内容包括:
|
||||
/// - ArchitectureLifecycleReadyEvent事件触发
|
||||
/// - ArchitectureDestroyingEvent事件触发
|
||||
/// - ArchitectureDestroyedEvent事件触发
|
||||
/// - ArchitectureFailedInitializationEvent事件触发
|
||||
/// - 事件的参数传递
|
||||
/// - 事件的订阅和取消订阅
|
||||
/// - 事件顺序验证(LifecycleReady -> Destroying -> Destroyed)
|
||||
/// </summary>
|
||||
[TestFixture]
|
||||
public class ArchitectureEventsTests
|
||||
{
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_eventBus = new EventBus();
|
||||
}
|
||||
|
||||
private EventBus? _eventBus;
|
||||
|
||||
/// <summary>
|
||||
/// 测试ArchitectureLifecycleReadyEvent事件可以创建并发送
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void ArchitectureLifecycleReadyEvent_Should_Be_Created_And_Sent()
|
||||
{
|
||||
bool eventReceived = false;
|
||||
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => eventReceived = true);
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
|
||||
|
||||
Assert.That(eventReceived, Is.True);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试ArchitectureDestroyingEvent事件可以创建并发送
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void ArchitectureDestroyingEvent_Should_Be_Created_And_Sent()
|
||||
{
|
||||
bool eventReceived = false;
|
||||
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureDestroyingEvent>(_ => eventReceived = true);
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureDestroyingEvent>();
|
||||
|
||||
Assert.That(eventReceived, Is.True);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试ArchitectureDestroyedEvent事件可以创建并发送
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void ArchitectureDestroyedEvent_Should_Be_Created_And_Sent()
|
||||
{
|
||||
bool eventReceived = false;
|
||||
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureDestroyedEvent>(_ => eventReceived = true);
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureDestroyedEvent>();
|
||||
|
||||
Assert.That(eventReceived, Is.True);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试ArchitectureFailedInitializationEvent事件可以创建并发送
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void ArchitectureFailedInitializationEvent_Should_Be_Created_And_Sent()
|
||||
{
|
||||
bool eventReceived = false;
|
||||
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureFailedInitializationEvent>(_ => eventReceived = true);
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureFailedInitializationEvent>();
|
||||
|
||||
Assert.That(eventReceived, Is.True);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试事件按正确顺序发送
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void Events_Should_Be_Sent_In_Correct_Order()
|
||||
{
|
||||
var events = new List<string>();
|
||||
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => events.Add("Ready"));
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureDestroyingEvent>(_ => events.Add("Destroying"));
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureDestroyedEvent>(_ => events.Add("Destroyed"));
|
||||
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureDestroyingEvent>();
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureDestroyedEvent>();
|
||||
|
||||
Assert.That(events.Count, Is.EqualTo(3));
|
||||
Assert.That(events[0], Is.EqualTo("Ready"));
|
||||
Assert.That(events[1], Is.EqualTo("Destroying"));
|
||||
Assert.That(events[2], Is.EqualTo("Destroyed"));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试多个订阅者都能接收到事件
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void Multiple_Subscribers_Should_All_Receive_Events()
|
||||
{
|
||||
var count1 = 0;
|
||||
var count2 = 0;
|
||||
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => count1++);
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => count2++);
|
||||
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
|
||||
|
||||
Assert.That(count1, Is.EqualTo(1));
|
||||
Assert.That(count2, Is.EqualTo(1));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试事件取消订阅后不再接收未来事件
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void Event_UnRegister_Should_Prevent_Future_Events()
|
||||
{
|
||||
var count = 0;
|
||||
var unregister = _eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => count++);
|
||||
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
|
||||
Assert.That(count, Is.EqualTo(1));
|
||||
|
||||
unregister.UnRegister();
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
|
||||
|
||||
Assert.That(count, Is.EqualTo(1));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试不同类型事件互不干扰
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void Different_Events_Should_Not_Interfere()
|
||||
{
|
||||
bool readyReceived = false;
|
||||
bool destroyingReceived = false;
|
||||
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(_ => readyReceived = true);
|
||||
_eventBus!.Register<ArchitectureEvents.ArchitectureDestroyingEvent>(_ => destroyingReceived = true);
|
||||
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>();
|
||||
|
||||
Assert.That(readyReceived, Is.True);
|
||||
Assert.That(destroyingReceived, Is.False);
|
||||
|
||||
_eventBus.Send<ArchitectureEvents.ArchitectureDestroyingEvent>();
|
||||
|
||||
Assert.That(destroyingReceived, Is.True);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试事件可以在没有订阅者时发送
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void Event_Can_Be_Sent_Without_Subscribers()
|
||||
{
|
||||
Assert.That(() => _eventBus!.Send<ArchitectureEvents.ArchitectureLifecycleReadyEvent>(),
|
||||
Throws.Nothing);
|
||||
}
|
||||
}
|
||||
@ -1,3 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using GFramework.Core.Abstractions.architecture;
|
||||
using GFramework.Core.Abstractions.enums;
|
||||
using GFramework.Core.Abstractions.environment;
|
||||
@ -71,11 +75,6 @@ public abstract class Architecture(
|
||||
/// </summary>
|
||||
private IIocContainer Container => Services.Container;
|
||||
|
||||
/// <summary>
|
||||
/// 获取事件总线
|
||||
/// </summary>
|
||||
private IEventBus EventBus => Services.EventBus;
|
||||
|
||||
/// <summary>
|
||||
/// 当前架构的阶段
|
||||
/// </summary>
|
||||
@ -363,10 +362,9 @@ public abstract class Architecture(
|
||||
return;
|
||||
}
|
||||
|
||||
// 进入销毁阶段并发送销毁开始事件
|
||||
// 进入销毁阶段
|
||||
_logger.Info("Starting architecture destruction");
|
||||
EnterPhase(ArchitecturePhase.Destroying);
|
||||
EventBus.Send(new ArchitectureEvents.ArchitectureDestroyingEvent());
|
||||
|
||||
// 销毁所有实现了 IDisposable 的组件(按注册逆序销毁)
|
||||
_logger.Info($"Destroying {_disposables.Count} disposable components");
|
||||
@ -389,9 +387,8 @@ public abstract class Architecture(
|
||||
_disposables.Clear();
|
||||
_disposableSet.Clear();
|
||||
|
||||
// 进入已销毁阶段并发送销毁完成事件
|
||||
// 进入已销毁阶段
|
||||
EnterPhase(ArchitecturePhase.Destroyed);
|
||||
EventBus.Send(new ArchitectureEvents.ArchitectureDestroyedEvent());
|
||||
_logger.Info("Architecture destruction completed");
|
||||
}
|
||||
|
||||
@ -499,7 +496,6 @@ public abstract class Architecture(
|
||||
{
|
||||
_logger.Error("Architecture initialization failed:", e);
|
||||
EnterPhase(ArchitecturePhase.FailedInitialization);
|
||||
EventBus.Send(new ArchitectureEvents.ArchitectureFailedInitializationEvent());
|
||||
throw;
|
||||
}
|
||||
}
|
||||
@ -518,7 +514,6 @@ public abstract class Architecture(
|
||||
{
|
||||
_logger.Error("Architecture initialization failed:", e);
|
||||
EnterPhase(ArchitecturePhase.FailedInitialization);
|
||||
EventBus.Send(new ArchitectureEvents.ArchitectureFailedInitializationEvent());
|
||||
throw;
|
||||
}
|
||||
}
|
||||
@ -560,7 +555,6 @@ public abstract class Architecture(
|
||||
|
||||
_mInitialized = true;
|
||||
EnterPhase(ArchitecturePhase.Ready);
|
||||
EventBus.Send(new ArchitectureEvents.ArchitectureLifecycleReadyEvent());
|
||||
|
||||
_logger.Info($"Architecture {GetType().Name} is ready - all components initialized");
|
||||
}
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
using GFramework.Core.Abstractions.coroutine;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using GFramework.Core.Abstractions.coroutine;
|
||||
|
||||
namespace GFramework.Core.coroutine;
|
||||
|
||||
|
||||
@ -1,31 +0,0 @@
|
||||
namespace GFramework.Core.events;
|
||||
|
||||
/// <summary>
|
||||
/// 架构事件定义类,包含应用程序架构生命周期相关的事件结构体
|
||||
/// </summary>
|
||||
public static class ArchitectureEvents
|
||||
{
|
||||
/// <summary>
|
||||
/// 架构生命周期准备就绪事件
|
||||
/// 当架构完成初始化并准备就绪时触发此事件
|
||||
/// </summary>
|
||||
public readonly struct ArchitectureLifecycleReadyEvent;
|
||||
|
||||
/// <summary>
|
||||
/// 架构销毁中事件
|
||||
/// 当架构开始销毁过程时触发此事件,表示系统正在关闭
|
||||
/// </summary>
|
||||
public readonly struct ArchitectureDestroyingEvent;
|
||||
|
||||
/// <summary>
|
||||
/// 架构已销毁事件
|
||||
/// 当架构完全销毁完成后触发此事件,表示系统已关闭
|
||||
/// </summary>
|
||||
public readonly struct ArchitectureDestroyedEvent;
|
||||
|
||||
/// <summary>
|
||||
/// 架构初始化失败事件
|
||||
/// 当架构初始化过程中发生错误时触发此事件
|
||||
/// </summary>
|
||||
public readonly struct ArchitectureFailedInitializationEvent;
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
using GFramework.Core.Abstractions.events;
|
||||
using System;
|
||||
using GFramework.Core.Abstractions.events;
|
||||
|
||||
namespace GFramework.Core.events;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user