diff --git a/GFramework.Core.Abstractions/architecture/IArchitectureServices.cs b/GFramework.Core.Abstractions/architecture/IArchitectureServices.cs index ef4c7ca..36a626d 100644 --- a/GFramework.Core.Abstractions/architecture/IArchitectureServices.cs +++ b/GFramework.Core.Abstractions/architecture/IArchitectureServices.cs @@ -26,15 +26,15 @@ public interface IArchitectureServices : IContextAware /// /// 获取命令总线 /// - public ICommandBus CommandBus { get; } + public ICommandExecutor CommandExecutor { get; } /// /// 获取查询总线 /// - public IQueryBus QueryBus { get; } + public IQueryExecutor QueryExecutor { get; } /// /// 获取异步查询总线 /// - public IAsyncQueryBus AsyncQueryBus { get; } + public IAsyncQueryExecutor AsyncQueryExecutor { get; } } \ No newline at end of file diff --git a/GFramework.Core.Abstractions/command/ICommandBus.cs b/GFramework.Core.Abstractions/command/ICommandBus.cs deleted file mode 100644 index 824ba51..0000000 --- a/GFramework.Core.Abstractions/command/ICommandBus.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace GFramework.Core.Abstractions.command; - -/// -/// 定义命令总线接口,用于执行各种命令 -/// -public interface ICommandBus -{ - /// - /// 发送并执行一个命令 - /// - /// 要执行的命令对象 - public void Send(ICommand command); - - /// - /// 发送并执行一个带返回值的命令 - /// - /// 命令执行结果的类型 - /// 要执行的带返回值的命令对象 - /// 命令执行的结果 - public TResult Send(ICommand command); - - /// - /// 发送并异步执行一个命令 - /// - /// 要执行的命令对象 - Task SendAsync(IAsyncCommand command); - - /// - /// 发送并异步执行一个带返回值的命令 - /// - /// 命令执行结果的类型 - /// 要执行的带返回值的命令对象 - /// 命令执行的结果 - Task SendAsync(IAsyncCommand command); -} \ No newline at end of file diff --git a/GFramework.Core.Abstractions/command/ICommandExecutor.cs b/GFramework.Core.Abstractions/command/ICommandExecutor.cs new file mode 100644 index 0000000..538a866 --- /dev/null +++ b/GFramework.Core.Abstractions/command/ICommandExecutor.cs @@ -0,0 +1,36 @@ +namespace GFramework.Core.Abstractions.command; + +/// +/// 定义命令执行器接口,提供同步和异步方式发送并执行命令的方法。 +/// +public interface ICommandExecutor +{ + /// + /// 发送并执行一个命令。 + /// + /// 要执行的命令对象,实现 ICommand 接口。 + public void Send(ICommand command); + + /// + /// 发送并执行一个带返回值的命令。 + /// + /// 命令执行结果的类型。 + /// 要执行的带返回值的命令对象,实现 ICommand<TResult> 接口。 + /// 命令执行的结果,类型为 TResult。 + public TResult Send(ICommand command); + + /// + /// 发送并异步执行一个命令。 + /// + /// 要执行的命令对象,实现 IAsyncCommand 接口。 + /// 表示异步操作的任务。 + Task SendAsync(IAsyncCommand command); + + /// + /// 发送并异步执行一个带返回值的命令。 + /// + /// 命令执行结果的类型。 + /// 要执行的带返回值的命令对象,实现 IAsyncCommand<TResult> 接口。 + /// 表示异步操作的任务,其结果为命令执行的结果,类型为 TResult。 + Task SendAsync(IAsyncCommand command); +} \ No newline at end of file diff --git a/GFramework.Core.Abstractions/query/IAsyncQueryBus.cs b/GFramework.Core.Abstractions/query/IAsyncQueryBus.cs deleted file mode 100644 index db1700c..0000000 --- a/GFramework.Core.Abstractions/query/IAsyncQueryBus.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace GFramework.Core.Abstractions.query; - -/// -/// 异步查询总线接口,用于处理异步查询请求 -/// -public interface IAsyncQueryBus -{ - /// - /// 异步发送查询请求并返回结果 - /// - /// 查询结果的类型 - /// 要执行的异步查询对象 - /// 表示异步操作的任务,任务结果为查询结果 - Task SendAsync(IAsyncQuery query); -} \ No newline at end of file diff --git a/GFramework.Core.Abstractions/query/IAsyncQueryExecutor.cs b/GFramework.Core.Abstractions/query/IAsyncQueryExecutor.cs new file mode 100644 index 0000000..22f18f0 --- /dev/null +++ b/GFramework.Core.Abstractions/query/IAsyncQueryExecutor.cs @@ -0,0 +1,16 @@ +namespace GFramework.Core.Abstractions.query; + + +/// +/// 定义一个异步查询执行器接口,用于发送异步查询请求并获取结果。 +/// +public interface IAsyncQueryExecutor +{ + /// + /// 异步发送查询请求并返回结果。 + /// + /// 查询结果的类型。 + /// 要执行的异步查询对象,必须实现 IAsyncQuery<TResult> 接口。 + /// 表示异步操作的任务,任务完成时返回查询结果。 + Task SendAsync(IAsyncQuery query); +} diff --git a/GFramework.Core.Abstractions/query/IQueryBus.cs b/GFramework.Core.Abstractions/query/IQueryBus.cs deleted file mode 100644 index 138548c..0000000 --- a/GFramework.Core.Abstractions/query/IQueryBus.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace GFramework.Core.Abstractions.query; - -/// -/// 查询总线接口,用于发送和处理查询请求 -/// -public interface IQueryBus -{ - /// - /// 发送查询请求并返回结果 - /// - /// 查询结果的类型 - /// 要发送的查询对象 - /// 查询结果 - public TResult Send(IQuery query); -} \ No newline at end of file diff --git a/GFramework.Core.Abstractions/query/IQueryExecutor.cs b/GFramework.Core.Abstractions/query/IQueryExecutor.cs new file mode 100644 index 0000000..6d47947 --- /dev/null +++ b/GFramework.Core.Abstractions/query/IQueryExecutor.cs @@ -0,0 +1,16 @@ +namespace GFramework.Core.Abstractions.query; + + +/// +/// 定义一个查询执行器接口,用于发送查询请求并获取结果。 +/// +public interface IQueryExecutor +{ + /// + /// 发送查询请求并返回结果。 + /// + /// 查询结果的类型。 + /// 要发送的查询对象,必须实现 IQuery<TResult> 接口。 + /// 查询的结果,类型为 TResult。 + TResult Send(IQuery query); +} diff --git a/GFramework.Core.Tests/architecture/ArchitectureContextTests.cs b/GFramework.Core.Tests/architecture/ArchitectureContextTests.cs index 1104c3f..059c5ac 100644 --- a/GFramework.Core.Tests/architecture/ArchitectureContextTests.cs +++ b/GFramework.Core.Tests/architecture/ArchitectureContextTests.cs @@ -59,9 +59,9 @@ public class ArchitectureContextTests // 创建服务实例 _eventBus = new EventBus(); - _commandBus = new CommandBus(); - _queryBus = new QueryBus(); - _asyncQueryBus = new AsyncQueryBus(); + _commandBus = new CommandExecutor(); + _queryBus = new QueryExecutor(); + _asyncQueryBus = new AsyncQueryExecutor(); _environment = new DefaultEnvironment(); // 将服务注册到容器 @@ -77,9 +77,9 @@ public class ArchitectureContextTests private ArchitectureContext? _context; private IocContainer? _container; private EventBus? _eventBus; - private CommandBus? _commandBus; - private QueryBus? _queryBus; - private AsyncQueryBus? _asyncQueryBus; + private CommandExecutor? _commandBus; + private QueryExecutor? _queryBus; + private AsyncQueryExecutor? _asyncQueryBus; private DefaultEnvironment? _environment; /// diff --git a/GFramework.Core.Tests/architecture/ArchitectureServicesTests.cs b/GFramework.Core.Tests/architecture/ArchitectureServicesTests.cs index 78858f1..9cf748f 100644 --- a/GFramework.Core.Tests/architecture/ArchitectureServicesTests.cs +++ b/GFramework.Core.Tests/architecture/ArchitectureServicesTests.cs @@ -21,7 +21,7 @@ namespace GFramework.Core.Tests.architecture; /// ArchitectureServices类的单元测试 /// 测试内容包括: /// - 服务容器初始化 -/// - 所有服务实例创建(Container, EventBus, CommandBus, QueryBus) +/// - 所有服务实例创建(Container, EventBus, CommandExecutor, QueryExecutor) /// - SetContext方法 - 设置上下文 /// - SetContext方法 - 重复设置上下文 /// - GetContext方法 - 获取已设置上下文 @@ -51,8 +51,8 @@ public class ArchitectureServicesTests { Assert.That(_services!.Container, Is.Not.Null); Assert.That(_services.EventBus, Is.Not.Null); - Assert.That(_services.CommandBus, Is.Not.Null); - Assert.That(_services.QueryBus, Is.Not.Null); + Assert.That(_services.CommandExecutor, Is.Not.Null); + Assert.That(_services.QueryExecutor, Is.Not.Null); } [Test] @@ -78,8 +78,8 @@ public class ArchitectureServicesTests [Test] public void CommandBus_Should_Be_Instance_Of_CommandBus() { - Assert.That(_services!.CommandBus, Is.InstanceOf()); - Assert.That(_services.CommandBus, Is.InstanceOf()); + Assert.That(_services!.CommandExecutor, Is.InstanceOf()); + Assert.That(_services.CommandExecutor, Is.InstanceOf()); } /// @@ -88,8 +88,8 @@ public class ArchitectureServicesTests [Test] public void QueryBus_Should_Be_Instance_Of_QueryBus() { - Assert.That(_services!.QueryBus, Is.InstanceOf()); - Assert.That(_services.QueryBus, Is.InstanceOf()); + Assert.That(_services!.QueryExecutor, Is.InstanceOf()); + Assert.That(_services.QueryExecutor, Is.InstanceOf()); } /// @@ -198,7 +198,7 @@ public class ArchitectureServicesTests var services1 = new ArchitectureServices(); var services2 = new ArchitectureServices(); - Assert.That(services1.CommandBus, Is.Not.SameAs(services2.CommandBus)); + Assert.That(services1.CommandExecutor, Is.Not.SameAs(services2.CommandExecutor)); } /// @@ -210,7 +210,7 @@ public class ArchitectureServicesTests var services1 = new ArchitectureServices(); var services2 = new ArchitectureServices(); - Assert.That(services1.QueryBus, Is.Not.SameAs(services2.QueryBus)); + Assert.That(services1.QueryExecutor, Is.Not.SameAs(services2.QueryExecutor)); } } @@ -224,8 +224,8 @@ public class TestArchitectureContextV3 : IArchitectureContext public IIocContainer Container => _container; public IEventBus EventBus => new EventBus(); - public ICommandBus CommandBus => new CommandBus(); - public IQueryBus QueryBus => new QueryBus(); + public ICommandExecutor CommandExecutor => new CommandExecutor(); + public IQueryExecutor QueryExecutor => new QueryExecutor(); public TService? GetService() where TService : class { diff --git a/GFramework.Core.Tests/architecture/GameContextTests.cs b/GFramework.Core.Tests/architecture/GameContextTests.cs index f52881f..9bd4ef8 100644 --- a/GFramework.Core.Tests/architecture/GameContextTests.cs +++ b/GFramework.Core.Tests/architecture/GameContextTests.cs @@ -244,12 +244,12 @@ public class TestArchitectureContext : IArchitectureContext /// /// 获取命令总线 /// - public ICommandBus CommandBus => new CommandBus(); + public ICommandExecutor CommandExecutor => new CommandExecutor(); /// /// 获取查询总线 /// - public IQueryBus QueryBus => new QueryBus(); + public IQueryExecutor QueryExecutor => new QueryExecutor(); /// /// 获取环境对象 diff --git a/GFramework.Core.Tests/command/AbstractAsyncCommandTests.cs b/GFramework.Core.Tests/command/AbstractAsyncCommandTests.cs index 988e612..c9863dc 100644 --- a/GFramework.Core.Tests/command/AbstractAsyncCommandTests.cs +++ b/GFramework.Core.Tests/command/AbstractAsyncCommandTests.cs @@ -34,10 +34,10 @@ public class AbstractAsyncCommandTests { _container = new IocContainer(); _container.RegisterPlurality(new EventBus()); - _container.RegisterPlurality(new CommandBus()); - _container.RegisterPlurality(new QueryBus()); + _container.RegisterPlurality(new CommandExecutor()); + _container.RegisterPlurality(new QueryExecutor()); _container.RegisterPlurality(new DefaultEnvironment()); - _container.RegisterPlurality(new AsyncQueryBus()); + _container.RegisterPlurality(new AsyncQueryExecutor()); _context = new ArchitectureContext(_container); } diff --git a/GFramework.Core.Tests/command/CommandBusTests.cs b/GFramework.Core.Tests/command/CommandExecutorTests.cs similarity index 91% rename from GFramework.Core.Tests/command/CommandBusTests.cs rename to GFramework.Core.Tests/command/CommandExecutorTests.cs index 2b0f032..908e258 100644 --- a/GFramework.Core.Tests/command/CommandBusTests.cs +++ b/GFramework.Core.Tests/command/CommandExecutorTests.cs @@ -17,15 +17,15 @@ namespace GFramework.Core.Tests.command; /// - SendAsync方法(带返回值)处理null异步命令 /// [TestFixture] -public class CommandBusTests +public class CommandExecutorTests { [SetUp] public void SetUp() { - _commandBus = new CommandBus(); + _commandExecutor = new CommandExecutor(); } - private CommandBus _commandBus = null!; + private CommandExecutor _commandExecutor = null!; /// /// 测试Send方法执行命令 @@ -36,7 +36,7 @@ public class CommandBusTests var input = new TestCommandInput { Value = 42 }; var command = new TestCommand(input); - Assert.DoesNotThrow(() => _commandBus.Send(command)); + Assert.DoesNotThrow(() => _commandExecutor.Send(command)); Assert.That(command.Executed, Is.True); Assert.That(command.ExecutedValue, Is.EqualTo(42)); } @@ -47,7 +47,7 @@ public class CommandBusTests [Test] public void Send_WithNullCommand_Should_ThrowArgumentNullException() { - Assert.Throws(() => _commandBus.Send(null!)); + Assert.Throws(() => _commandExecutor.Send(null!)); } /// @@ -59,7 +59,7 @@ public class CommandBusTests var input = new TestCommandInput { Value = 100 }; var command = new TestCommandWithResult(input); - var result = _commandBus.Send(command); + var result = _commandExecutor.Send(command); Assert.That(command.Executed, Is.True); Assert.That(result, Is.EqualTo(200)); @@ -71,7 +71,7 @@ public class CommandBusTests [Test] public void Send_WithResult_AndNullCommand_Should_ThrowArgumentNullException() { - Assert.Throws(() => _commandBus.Send(null!)); + Assert.Throws(() => _commandExecutor.Send(null!)); } /// @@ -83,7 +83,7 @@ public class CommandBusTests var input = new TestCommandInput { Value = 42 }; var command = new TestAsyncCommand(input); - await _commandBus.SendAsync(command); + await _commandExecutor.SendAsync(command); Assert.That(command.Executed, Is.True); Assert.That(command.ExecutedValue, Is.EqualTo(42)); @@ -95,7 +95,7 @@ public class CommandBusTests [Test] public void SendAsync_WithNullCommand_Should_ThrowArgumentNullException() { - Assert.ThrowsAsync(async () => await _commandBus.SendAsync(null!)); + Assert.ThrowsAsync(async () => await _commandExecutor.SendAsync(null!)); } /// @@ -107,7 +107,7 @@ public class CommandBusTests var input = new TestCommandInput { Value = 100 }; var command = new TestAsyncCommandWithResult(input); - var result = await _commandBus.SendAsync(command); + var result = await _commandExecutor.SendAsync(command); Assert.That(command.Executed, Is.True); Assert.That(result, Is.EqualTo(200)); @@ -119,7 +119,7 @@ public class CommandBusTests [Test] public void SendAsync_WithResult_AndNullCommand_Should_ThrowArgumentNullException() { - Assert.ThrowsAsync(async () => await _commandBus.SendAsync(null!)); + Assert.ThrowsAsync(async () => await _commandExecutor.SendAsync(null!)); } } diff --git a/GFramework.Core.Tests/query/AbstractAsyncQueryTests.cs b/GFramework.Core.Tests/query/AbstractAsyncQueryTests.cs index 4cf020b..c908973 100644 --- a/GFramework.Core.Tests/query/AbstractAsyncQueryTests.cs +++ b/GFramework.Core.Tests/query/AbstractAsyncQueryTests.cs @@ -32,10 +32,10 @@ public class AbstractAsyncQueryTests { _container = new IocContainer(); _container.RegisterPlurality(new EventBus()); - _container.RegisterPlurality(new CommandBus()); - _container.RegisterPlurality(new QueryBus()); + _container.RegisterPlurality(new CommandExecutor()); + _container.RegisterPlurality(new QueryExecutor()); _container.RegisterPlurality(new DefaultEnvironment()); - _container.RegisterPlurality(new AsyncQueryBus()); + _container.RegisterPlurality(new AsyncQueryExecutor()); _context = new ArchitectureContext(_container); } diff --git a/GFramework.Core.Tests/query/AsyncQueryBusTests.cs b/GFramework.Core.Tests/query/AsyncQueryExecutorTests.cs similarity index 91% rename from GFramework.Core.Tests/query/AsyncQueryBusTests.cs rename to GFramework.Core.Tests/query/AsyncQueryExecutorTests.cs index 2bdb793..f63cbdd 100644 --- a/GFramework.Core.Tests/query/AsyncQueryBusTests.cs +++ b/GFramework.Core.Tests/query/AsyncQueryExecutorTests.cs @@ -15,15 +15,15 @@ namespace GFramework.Core.Tests.query; /// - 异步查询的上下文传递 /// [TestFixture] -public class AsyncQueryBusTests +public class AsyncQueryExecutorTests { [SetUp] public void SetUp() { - _asyncQueryBus = new AsyncQueryBus(); + _asyncQueryExecutor = new AsyncQueryExecutor(); } - private AsyncQueryBus _asyncQueryBus = null!; + private AsyncQueryExecutor _asyncQueryExecutor = null!; /// /// 测试SendAsync方法正确返回查询结果 @@ -34,7 +34,7 @@ public class AsyncQueryBusTests var input = new TestAsyncQueryInput { Value = 10 }; var query = new TestAsyncQuery(input); - var result = await _asyncQueryBus.SendAsync(query); + var result = await _asyncQueryExecutor.SendAsync(query); Assert.That(result, Is.EqualTo(20)); } @@ -45,7 +45,7 @@ public class AsyncQueryBusTests [Test] public void SendAsync_WithNullQuery_Should_ThrowArgumentNullException() { - Assert.ThrowsAsync(async () => await _asyncQueryBus.SendAsync(null!)); + Assert.ThrowsAsync(async () => await _asyncQueryExecutor.SendAsync(null!)); } /// @@ -57,7 +57,7 @@ public class AsyncQueryBusTests var input = new TestAsyncQueryInput { Value = 5 }; var query = new TestAsyncStringQuery(input); - var result = await _asyncQueryBus.SendAsync(query); + var result = await _asyncQueryExecutor.SendAsync(query); Assert.That(result, Is.EqualTo("Result: 10")); } @@ -71,7 +71,7 @@ public class AsyncQueryBusTests var input = new TestAsyncQueryInput { Value = 42 }; var query = new TestAsyncBooleanQuery(input); - var result = await _asyncQueryBus.SendAsync(query); + var result = await _asyncQueryExecutor.SendAsync(query); Assert.That(result, Is.True); } @@ -85,7 +85,7 @@ public class AsyncQueryBusTests var input = new TestAsyncQueryInput { Value = 100 }; var query = new TestAsyncComplexQuery(input); - var result = await _asyncQueryBus.SendAsync(query); + var result = await _asyncQueryExecutor.SendAsync(query); Assert.That(result, Is.Not.Null); Assert.That(result.Value, Is.EqualTo(200)); @@ -101,7 +101,7 @@ public class AsyncQueryBusTests var input = new TestAsyncQueryInput { Value = 0 }; var query = new TestAsyncQueryWithException(input); - Assert.ThrowsAsync(async () => await _asyncQueryBus.SendAsync(query)); + Assert.ThrowsAsync(async () => await _asyncQueryExecutor.SendAsync(query)); } /// @@ -113,8 +113,8 @@ public class AsyncQueryBusTests var input = new TestAsyncQueryInput { Value = 10 }; var query = new TestAsyncQuery(input); - var result1 = await _asyncQueryBus.SendAsync(query); - var result2 = await _asyncQueryBus.SendAsync(query); + var result1 = await _asyncQueryExecutor.SendAsync(query); + var result2 = await _asyncQueryExecutor.SendAsync(query); Assert.That(result1, Is.EqualTo(20)); Assert.That(result2, Is.EqualTo(20)); @@ -131,8 +131,8 @@ public class AsyncQueryBusTests var query1 = new TestAsyncQuery(input1); var query2 = new TestAsyncQuery(input2); - var result1 = await _asyncQueryBus.SendAsync(query1); - var result2 = await _asyncQueryBus.SendAsync(query2); + var result1 = await _asyncQueryExecutor.SendAsync(query1); + var result2 = await _asyncQueryExecutor.SendAsync(query2); Assert.That(result1, Is.EqualTo(20)); Assert.That(result2, Is.EqualTo(40)); diff --git a/GFramework.Core.Tests/query/QueryBusTests.cs b/GFramework.Core.Tests/query/QueryExecutorTests.cs similarity index 91% rename from GFramework.Core.Tests/query/QueryBusTests.cs rename to GFramework.Core.Tests/query/QueryExecutorTests.cs index 84416f4..06a2770 100644 --- a/GFramework.Core.Tests/query/QueryBusTests.cs +++ b/GFramework.Core.Tests/query/QueryExecutorTests.cs @@ -8,7 +8,7 @@ namespace GFramework.Core.Tests.query; /// 查询总线测试类,用于测试QueryBus的功能和异常处理 /// [TestFixture] -public class QueryBusTests +public class QueryExecutorTests { /// /// 测试设置方法,在每个测试方法执行前初始化查询总线实例 @@ -16,10 +16,10 @@ public class QueryBusTests [SetUp] public void SetUp() { - _queryBus = new QueryBus(); + _queryExecutor = new QueryExecutor(); } - private QueryBus _queryBus = null!; + private QueryExecutor _queryExecutor = null!; /// /// 测试Send方法是否能正确返回查询结果 @@ -31,7 +31,7 @@ public class QueryBusTests var input = new TestQueryInput { Value = 10 }; var query = new TestQuery(input); - var result = _queryBus.Send(query); + var result = _queryExecutor.Send(query); Assert.That(result, Is.EqualTo(20)); } @@ -43,7 +43,7 @@ public class QueryBusTests [Test] public void Send_WithNullQuery_Should_ThrowArgumentNullException() { - Assert.Throws(() => _queryBus.Send(null!)); + Assert.Throws(() => _queryExecutor.Send(null!)); } /// @@ -56,7 +56,7 @@ public class QueryBusTests var input = new TestQueryInput { Value = 5 }; var query = new TestStringQuery(input); - var result = _queryBus.Send(query); + var result = _queryExecutor.Send(query); Assert.That(result, Is.EqualTo("Result: 10")); } diff --git a/GFramework.Core.Tests/state/StateMachineSystemTests.cs b/GFramework.Core.Tests/state/StateMachineSystemTests.cs index b41ba5e..632cf6b 100644 --- a/GFramework.Core.Tests/state/StateMachineSystemTests.cs +++ b/GFramework.Core.Tests/state/StateMachineSystemTests.cs @@ -50,10 +50,10 @@ public class StateMachineSystemTests LoggerFactoryResolver.Provider.CreateLogger(nameof(StateMachineSystemTests))); container.RegisterPlurality(_eventBus); - container.RegisterPlurality(new CommandBus()); - container.RegisterPlurality(new QueryBus()); + container.RegisterPlurality(new CommandExecutor()); + container.RegisterPlurality(new QueryExecutor()); container.RegisterPlurality(new DefaultEnvironment()); - container.RegisterPlurality(new AsyncQueryBus()); + container.RegisterPlurality(new AsyncQueryExecutor()); _context = new ArchitectureContext(container); diff --git a/GFramework.Core.Tests/utility/AbstractContextUtilityTests.cs b/GFramework.Core.Tests/utility/AbstractContextUtilityTests.cs index 61eea3b..8339e2c 100644 --- a/GFramework.Core.Tests/utility/AbstractContextUtilityTests.cs +++ b/GFramework.Core.Tests/utility/AbstractContextUtilityTests.cs @@ -32,10 +32,10 @@ public class AbstractContextUtilityTests { _container = new IocContainer(); _container.RegisterPlurality(new EventBus()); - _container.RegisterPlurality(new CommandBus()); - _container.RegisterPlurality(new QueryBus()); + _container.RegisterPlurality(new CommandExecutor()); + _container.RegisterPlurality(new QueryExecutor()); _container.RegisterPlurality(new DefaultEnvironment()); - _container.RegisterPlurality(new AsyncQueryBus()); + _container.RegisterPlurality(new AsyncQueryExecutor()); _context = new ArchitectureContext(_container); } diff --git a/GFramework.Core/architecture/ArchitectureContext.cs b/GFramework.Core/architecture/ArchitectureContext.cs index a9776ec..5d43303 100644 --- a/GFramework.Core/architecture/ArchitectureContext.cs +++ b/GFramework.Core/architecture/ArchitectureContext.cs @@ -61,8 +61,8 @@ public class ArchitectureContext(IIocContainer container) : IArchitectureContext public TResult SendQuery(IQuery query) { if (query == null) throw new ArgumentNullException(nameof(query)); - var queryBus = GetOrCache(); - if (queryBus == null) throw new InvalidOperationException("IQueryBus not registered"); + var queryBus = GetOrCache(); + if (queryBus == null) throw new InvalidOperationException("IQueryExecutor not registered"); return queryBus.Send(query); } @@ -75,8 +75,8 @@ public class ArchitectureContext(IIocContainer container) : IArchitectureContext public async Task SendQueryAsync(IAsyncQuery query) { if (query == null) throw new ArgumentNullException(nameof(query)); - var asyncQueryBus = GetOrCache(); - if (asyncQueryBus == null) throw new InvalidOperationException("IAsyncQueryBus not registered"); + var asyncQueryBus = GetOrCache(); + if (asyncQueryBus == null) throw new InvalidOperationException("IAsyncQueryExecutor not registered"); return await asyncQueryBus.SendAsync(query); } @@ -125,7 +125,7 @@ public class ArchitectureContext(IIocContainer container) : IArchitectureContext public void SendCommand(ICommand command) { ArgumentNullException.ThrowIfNull(command); - var commandBus = GetOrCache(); + var commandBus = GetOrCache(); commandBus?.Send(command); } @@ -138,8 +138,8 @@ public class ArchitectureContext(IIocContainer container) : IArchitectureContext public TResult SendCommand(ICommand command) { ArgumentNullException.ThrowIfNull(command); - var commandBus = GetOrCache(); - if (commandBus == null) throw new InvalidOperationException("ICommandBus not registered"); + var commandBus = GetOrCache(); + if (commandBus == null) throw new InvalidOperationException("ICommandExecutor not registered"); return commandBus.Send(command); } @@ -150,8 +150,8 @@ public class ArchitectureContext(IIocContainer container) : IArchitectureContext public async Task SendCommandAsync(IAsyncCommand command) { ArgumentNullException.ThrowIfNull(command); - var commandBus = GetOrCache(); - if (commandBus == null) throw new InvalidOperationException("ICommandBus not registered"); + var commandBus = GetOrCache(); + if (commandBus == null) throw new InvalidOperationException("ICommandExecutor not registered"); await commandBus.SendAsync(command); } @@ -164,8 +164,8 @@ public class ArchitectureContext(IIocContainer container) : IArchitectureContext public async Task SendCommandAsync(IAsyncCommand command) { ArgumentNullException.ThrowIfNull(command); - var commandBus = GetOrCache(); - if (commandBus == null) throw new InvalidOperationException("ICommandBus not registered"); + var commandBus = GetOrCache(); + if (commandBus == null) throw new InvalidOperationException("ICommandExecutor not registered"); return await commandBus.SendAsync(command); } diff --git a/GFramework.Core/architecture/ArchitectureServices.cs b/GFramework.Core/architecture/ArchitectureServices.cs index 16521a4..563ee8a 100644 --- a/GFramework.Core/architecture/ArchitectureServices.cs +++ b/GFramework.Core/architecture/ArchitectureServices.cs @@ -7,7 +7,6 @@ using GFramework.Core.command; using GFramework.Core.events; using GFramework.Core.ioc; using GFramework.Core.query; -using IAsyncQueryBus = GFramework.Core.Abstractions.query.IAsyncQueryBus; namespace GFramework.Core.architecture; @@ -19,12 +18,12 @@ public class ArchitectureServices : IArchitectureServices /// /// 异步查询总线实例 /// - private readonly IAsyncQueryBus _asyncQueryBus; + private readonly IAsyncQueryExecutor _asyncQueryExecutor; /// - /// 命令总线实例 + /// 命令执行器实例 /// - private readonly ICommandBus _commandBus; + private readonly ICommandExecutor _commandExecutor; /// /// 事件总线实例 @@ -32,14 +31,19 @@ public class ArchitectureServices : IArchitectureServices private readonly IEventBus _eventBus; /// - /// 查询总线实例 + /// 同步查询执行器实例 /// - private readonly IQueryBus _queryBus; + private readonly IQueryExecutor _queryExecutor; + /// + /// 架构上下文对象 + /// private IArchitectureContext _context = null!; /// /// 构造函数,初始化架构服务 + /// 初始化依赖注入容器,并创建事件总线、命令执行器、查询执行器和异步查询执行器的实例, + /// 然后将这些服务注册到容器中。 /// public ArchitectureServices() { @@ -47,15 +51,15 @@ public class ArchitectureServices : IArchitectureServices // 创建服务实例 _eventBus = new EventBus(); - _commandBus = new CommandBus(); - _queryBus = new QueryBus(); - _asyncQueryBus = new AsyncQueryBus(); + _commandExecutor = new CommandExecutor(); + _queryExecutor = new QueryExecutor(); + _asyncQueryExecutor = new AsyncQueryExecutor(); // 将服务注册到容器 Container.RegisterPlurality(_eventBus); - Container.RegisterPlurality(_commandBus); - Container.RegisterPlurality(_queryBus); - Container.RegisterPlurality(_asyncQueryBus); + Container.RegisterPlurality(_commandExecutor); + Container.RegisterPlurality(_queryExecutor); + Container.RegisterPlurality(_asyncQueryExecutor); } /// @@ -64,24 +68,24 @@ public class ArchitectureServices : IArchitectureServices public IIocContainer Container { get; } /// - /// 获取类型事件系统 + /// 获取事件总线实例 /// public IEventBus EventBus => _eventBus; /// - /// 获取命令总线 + /// 获取命令执行器实例 /// - public ICommandBus CommandBus => _commandBus; + public ICommandExecutor CommandExecutor => _commandExecutor; /// - /// 获取查询总线 + /// 获取同步查询执行器实例 /// - public IQueryBus QueryBus => _queryBus; + public IQueryExecutor QueryExecutor => _queryExecutor; /// - /// 获取异步查询总线 + /// 获取异步查询执行器实例 /// - public IAsyncQueryBus AsyncQueryBus => _asyncQueryBus; + public IAsyncQueryExecutor AsyncQueryExecutor => _asyncQueryExecutor; /// /// 设置架构上下文 @@ -101,4 +105,4 @@ public class ArchitectureServices : IArchitectureServices { return _context; } -} \ No newline at end of file +} diff --git a/GFramework.Core/command/CommandBus.cs b/GFramework.Core/command/CommandExecutor.cs similarity index 91% rename from GFramework.Core/command/CommandBus.cs rename to GFramework.Core/command/CommandExecutor.cs index b7d4215..d9b5d9c 100644 --- a/GFramework.Core/command/CommandBus.cs +++ b/GFramework.Core/command/CommandExecutor.cs @@ -4,9 +4,10 @@ using IAsyncCommand = GFramework.Core.Abstractions.command.IAsyncCommand; namespace GFramework.Core.command; /// -/// 命令总线实现类,用于发送和执行命令 +/// 表示一个命令执行器,用于执行命令操作。 +/// 该类实现了 ICommandExecutor 接口,提供命令执行的核心功能。 /// -public sealed class CommandBus : ICommandBus +public sealed class CommandExecutor : ICommandExecutor { /// /// 发送并执行无返回值的命令 diff --git a/GFramework.Core/query/AsyncQueryBus.cs b/GFramework.Core/query/AsyncQueryExecutor.cs similarity index 91% rename from GFramework.Core/query/AsyncQueryBus.cs rename to GFramework.Core/query/AsyncQueryExecutor.cs index 787697e..7f57ab3 100644 --- a/GFramework.Core/query/AsyncQueryBus.cs +++ b/GFramework.Core/query/AsyncQueryExecutor.cs @@ -5,7 +5,7 @@ namespace GFramework.Core.query; /// /// 异步查询总线实现,用于处理异步查询请求 /// -public sealed class AsyncQueryBus : IAsyncQueryBus +public sealed class AsyncQueryExecutor : IAsyncQueryExecutor { /// /// 异步发送查询请求并返回结果 diff --git a/GFramework.Core/query/QueryBus.cs b/GFramework.Core/query/QueryBus.cs deleted file mode 100644 index ce1f698..0000000 --- a/GFramework.Core/query/QueryBus.cs +++ /dev/null @@ -1,23 +0,0 @@ -using GFramework.Core.Abstractions.query; - -namespace GFramework.Core.query; - -/// -/// 查询总线实现,负责执行查询并返回结果 -/// -public sealed class QueryBus : IQueryBus -{ - /// - /// 执行指定的查询并返回结果 - /// - /// 查询结果的类型 - /// 要执行的查询对象 - /// 查询执行结果 - public TResult Send(IQuery query) - { - // 验证查询参数不为null - ArgumentNullException.ThrowIfNull(query); - - return query.Do(); - } -} \ No newline at end of file diff --git a/GFramework.Core/query/QueryExecutor.cs b/GFramework.Core/query/QueryExecutor.cs new file mode 100644 index 0000000..d0ac3c7 --- /dev/null +++ b/GFramework.Core/query/QueryExecutor.cs @@ -0,0 +1,27 @@ +using GFramework.Core.Abstractions.query; + +namespace GFramework.Core.query; + + +/// +/// QueryExecutor 类负责执行查询操作,实现 IQueryExecutor 接口。 +/// 该类是密封的,防止被继承。 +/// +public sealed class QueryExecutor : IQueryExecutor +{ + /// + /// 执行指定的查询并返回结果。 + /// 该方法通过调用查询对象的 Do 方法来获取结果。 + /// + /// 查询结果的类型。 + /// 要执行的查询对象,必须实现 IQuery<TResult> 接口。 + /// 查询执行的结果,类型为 TResult。 + public TResult Send(IQuery query) + { + // 验证查询参数不为 null,如果为 null 则抛出 ArgumentNullException 异常 + ArgumentNullException.ThrowIfNull(query); + + // 调用查询对象的 Do 方法执行查询并返回结果 + return query.Do(); + } +}