mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
refactor(architecture): 移除查询和事件发布语法糖方法
- 删除 ArchitectureContext 中的 QueryAsync 和 PublishEventAsync 扩展方法 - 删除 ContextAwareExtensions 中对应的扩展方法实现 - 从 IArchitectureContext 接口中移除相关方法定义 - 更新测试代码中的参数命名从 command 到 query - 移除相关的单元测试用例 - 修正 Godot 扩展中对 PublishEventAsync 的调用为 PublishAsync
This commit is contained in:
parent
984829c368
commit
d76751c636
@ -104,9 +104,9 @@ public interface IArchitectureContext
|
||||
/// [Mediator] 发送查询的同步版本(不推荐,仅用于兼容性)
|
||||
/// </summary>
|
||||
/// <typeparam name="TResponse">查询响应类型</typeparam>
|
||||
/// <param name="command">要发送的查询对象</param>
|
||||
/// <param name="query">要发送的查询对象</param>
|
||||
/// <returns>查询结果</returns>
|
||||
TResponse SendQuery<TResponse>(Mediator.IQuery<TResponse> command);
|
||||
TResponse SendQuery<TResponse>(Mediator.IQuery<TResponse> query);
|
||||
|
||||
/// <summary>
|
||||
/// 异步发送一个查询请求
|
||||
@ -121,10 +121,10 @@ public interface IArchitectureContext
|
||||
/// 通过Mediator模式发送查询请求,支持取消操作
|
||||
/// </summary>
|
||||
/// <typeparam name="TResponse">查询响应类型</typeparam>
|
||||
/// <param name="command">要发送的查询对象</param>
|
||||
/// <param name="query">要发送的查询对象</param>
|
||||
/// <param name="cancellationToken">取消令牌,用于取消操作</param>
|
||||
/// <returns>包含查询结果的ValueTask</returns>
|
||||
ValueTask<TResponse> SendQueryAsync<TResponse>(Mediator.IQuery<TResponse> command,
|
||||
ValueTask<TResponse> SendQueryAsync<TResponse>(Mediator.IQuery<TResponse> query,
|
||||
CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
@ -199,20 +199,6 @@ public interface IArchitectureContext
|
||||
IRequest<TResponse> command,
|
||||
CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// 发送查询
|
||||
/// </summary>
|
||||
ValueTask<TResponse> QueryAsync<TResponse>(
|
||||
IRequest<TResponse> query,
|
||||
CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// 发布事件通知
|
||||
/// </summary>
|
||||
ValueTask PublishEventAsync<TNotification>(
|
||||
TNotification notification,
|
||||
CancellationToken cancellationToken = default)
|
||||
where TNotification : INotification;
|
||||
|
||||
/// <summary>
|
||||
/// 获取环境对象
|
||||
|
||||
@ -288,13 +288,13 @@ public class TestArchitectureContextV3 : IArchitectureContext
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ValueTask<TResponse> SendQueryAsync<TResponse>(Mediator.IQuery<TResponse> command,
|
||||
public ValueTask<TResponse> SendQueryAsync<TResponse>(Mediator.IQuery<TResponse> query,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public TResponse SendQuery<TResponse>(Mediator.IQuery<TResponse> command)
|
||||
public TResponse SendQuery<TResponse>(Mediator.IQuery<TResponse> query)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
@ -323,18 +323,6 @@ public class TestArchitectureContextV3 : IArchitectureContext
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ValueTask<TResponse> QueryAsync<TResponse>(IRequest<TResponse> query,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ValueTask PublishEventAsync<TNotification>(TNotification notification,
|
||||
CancellationToken cancellationToken = default) where TNotification : INotification
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void SendCommand(ICommand command)
|
||||
{
|
||||
}
|
||||
@ -368,6 +356,18 @@ public class TestArchitectureContextV3 : IArchitectureContext
|
||||
{
|
||||
return _environment;
|
||||
}
|
||||
|
||||
public ValueTask<TResponse> QueryAsync<TResponse>(IRequest<TResponse> query,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ValueTask PublishEventAsync<TNotification>(TNotification notification,
|
||||
CancellationToken cancellationToken = default) where TNotification : INotification
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
@ -357,13 +357,13 @@ public class TestArchitectureContext : IArchitectureContext
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ValueTask<TResponse> SendQueryAsync<TResponse>(Mediator.IQuery<TResponse> command,
|
||||
public ValueTask<TResponse> SendQueryAsync<TResponse>(Mediator.IQuery<TResponse> query,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public TResponse SendQuery<TResponse>(Mediator.IQuery<TResponse> command)
|
||||
public TResponse SendQuery<TResponse>(Mediator.IQuery<TResponse> query)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
@ -392,18 +392,6 @@ public class TestArchitectureContext : IArchitectureContext
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ValueTask<TResponse> QueryAsync<TResponse>(IRequest<TResponse> query,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ValueTask PublishEventAsync<TNotification>(TNotification notification,
|
||||
CancellationToken cancellationToken = default) where TNotification : INotification
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送命令
|
||||
/// </summary>
|
||||
@ -463,4 +451,16 @@ public class TestArchitectureContext : IArchitectureContext
|
||||
{
|
||||
return Environment;
|
||||
}
|
||||
|
||||
public ValueTask<TResponse> QueryAsync<TResponse>(IRequest<TResponse> query,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public ValueTask PublishEventAsync<TNotification>(TNotification notification,
|
||||
CancellationToken cancellationToken = default) where TNotification : INotification
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@ -150,27 +150,6 @@ public class MediatorComprehensiveTests
|
||||
Assert.That(result, Is.EqualTo(42));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task QueryAsync_Should_ReturnResult_When_Query_IsValid()
|
||||
{
|
||||
var testQuery = new TestQuery { QueryResult = "test result" };
|
||||
var result = await _context!.QueryAsync(testQuery);
|
||||
|
||||
Assert.That(result, Is.EqualTo("test result"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task PublishEventAsync_Should_PublishNotification_When_Notification_IsValid()
|
||||
{
|
||||
TestNotificationHandler.LastReceivedMessage = null;
|
||||
var testNotification = new TestNotification { Message = "test event" };
|
||||
|
||||
await _context!.PublishEventAsync(testNotification);
|
||||
await Task.Delay(100);
|
||||
|
||||
Assert.That(TestNotificationHandler.LastReceivedMessage, Is.EqualTo("test event"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetService_Should_Use_Cache()
|
||||
{
|
||||
@ -290,21 +269,6 @@ public class MediatorComprehensiveTests
|
||||
Assert.That(sharedData.Value, Is.EqualTo(30)); // 10 + 20
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Query_Caching_With_Mediator()
|
||||
{
|
||||
var cache = new Dictionary<string, string>();
|
||||
var query1 = new TestCachingQuery { Key = "test1", Cache = cache };
|
||||
var query2 = new TestCachingQuery { Key = "test1", Cache = cache }; // 相同key
|
||||
|
||||
var result1 = await _context!.QueryAsync(query1);
|
||||
var result2 = await _context.QueryAsync(query2);
|
||||
|
||||
// 验证缓存生效(相同key返回相同结果)
|
||||
Assert.That(result1, Is.EqualTo(result2));
|
||||
Assert.That(cache.Count, Is.EqualTo(1)); // 只缓存了一次
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Notification_Ordering_Should_Be_Preserved()
|
||||
{
|
||||
|
||||
@ -166,29 +166,6 @@ public class ArchitectureContext(IIocContainer container) : IArchitectureContext
|
||||
return await SendRequestAsync(command, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// [扩展] 发送查询
|
||||
/// 语法糖,等同于 SendRequestAsync,语义更清晰
|
||||
/// </summary>
|
||||
public async ValueTask<TResponse> QueryAsync<TResponse>(
|
||||
IRequest<TResponse> query,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
return await SendRequestAsync(query, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// [扩展] 发布事件通知
|
||||
/// 语法糖,等同于 PublishAsync
|
||||
/// </summary>
|
||||
public async ValueTask PublishEventAsync<TNotification>(
|
||||
TNotification notification,
|
||||
CancellationToken cancellationToken = default)
|
||||
where TNotification : INotification
|
||||
{
|
||||
await PublishAsync(notification, cancellationToken);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Query Execution
|
||||
@ -211,11 +188,11 @@ public class ArchitectureContext(IIocContainer container) : IArchitectureContext
|
||||
/// [Mediator] 发送查询的同步版本(不推荐,仅用于兼容性)
|
||||
/// </summary>
|
||||
/// <typeparam name="TResponse">查询响应类型</typeparam>
|
||||
/// <param name="command">要发送的查询对象</param>
|
||||
/// <param name="query">要发送的查询对象</param>
|
||||
/// <returns>查询结果</returns>
|
||||
public TResponse SendQuery<TResponse>(Mediator.IQuery<TResponse> command)
|
||||
public TResponse SendQuery<TResponse>(Mediator.IQuery<TResponse> query)
|
||||
{
|
||||
return SendQueryAsync(command).AsTask().GetAwaiter().GetResult();
|
||||
return SendQueryAsync(query).AsTask().GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -237,19 +214,19 @@ public class ArchitectureContext(IIocContainer container) : IArchitectureContext
|
||||
/// 通过Mediator模式发送查询请求,支持取消操作
|
||||
/// </summary>
|
||||
/// <typeparam name="TResponse">查询响应类型</typeparam>
|
||||
/// <param name="command">要发送的查询对象</param>
|
||||
/// <param name="query">要发送的查询对象</param>
|
||||
/// <param name="cancellationToken">取消令牌,用于取消操作</param>
|
||||
/// <returns>包含查询结果的ValueTask</returns>
|
||||
public async ValueTask<TResponse> SendQueryAsync<TResponse>(Mediator.IQuery<TResponse> command,
|
||||
public async ValueTask<TResponse> SendQueryAsync<TResponse>(Mediator.IQuery<TResponse> query,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(command);
|
||||
ArgumentNullException.ThrowIfNull(query);
|
||||
|
||||
var sender = Sender;
|
||||
if (sender == null)
|
||||
throw new InvalidOperationException("Sender not registered.");
|
||||
|
||||
return await sender.Send(command, cancellationToken);
|
||||
return await sender.Send(query, cancellationToken);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@ -456,43 +456,4 @@ public static class ContextAwareExtensions
|
||||
var context = contextAware.GetContext();
|
||||
return context.SendAsync(command, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送查询
|
||||
/// </summary>
|
||||
/// <typeparam name="TResponse">响应类型</typeparam>
|
||||
/// <param name="contextAware">实现 IContextAware 接口的对象</param>
|
||||
/// <param name="query">要发送的查询</param>
|
||||
/// <param name="cancellationToken">取消令牌</param>
|
||||
/// <returns>查询结果</returns>
|
||||
/// <exception cref="ArgumentNullException">当 contextAware 或 query 为 null 时抛出</exception>
|
||||
public static ValueTask<TResponse> QueryAsync<TResponse>(this IContextAware contextAware,
|
||||
IRequest<TResponse> query, CancellationToken cancellationToken = default)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(contextAware);
|
||||
ArgumentNullException.ThrowIfNull(query);
|
||||
|
||||
var context = contextAware.GetContext();
|
||||
return context.QueryAsync(query, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发布事件通知
|
||||
/// </summary>
|
||||
/// <typeparam name="TNotification">通知类型</typeparam>
|
||||
/// <param name="contextAware">实现 IContextAware 接口的对象</param>
|
||||
/// <param name="notification">要发布的通知</param>
|
||||
/// <param name="cancellationToken">取消令牌</param>
|
||||
/// <returns>异步任务</returns>
|
||||
/// <exception cref="ArgumentNullException">当 contextAware 或 notification 为 null 时抛出</exception>
|
||||
public static ValueTask PublishEventAsync<TNotification>(this IContextAware contextAware,
|
||||
TNotification notification, CancellationToken cancellationToken = default)
|
||||
where TNotification : INotification
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(contextAware);
|
||||
ArgumentNullException.ThrowIfNull(notification);
|
||||
|
||||
var context = contextAware.GetContext();
|
||||
return context.PublishEventAsync(notification, cancellationToken);
|
||||
}
|
||||
}
|
||||
@ -99,7 +99,7 @@ public static class ContextAwareCoroutineExtensions
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
return contextAware
|
||||
.PublishEventAsync(notification, cancellationToken)
|
||||
.PublishAsync(notification, cancellationToken)
|
||||
.AsTask()
|
||||
.ToCoroutineEnumerator()
|
||||
.RunCoroutine(segment, tag);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user