From a4c719773e8e77f2f7a02ff7b33b8546d67ad94a Mon Sep 17 00:00:00 2001
From: GeWuYou <95328647+GeWuYou@users.noreply.github.com>
Date: Sat, 14 Feb 2026 13:35:34 +0800
Subject: [PATCH] =?UTF-8?q?feat(cqrs):=20=E6=B7=BB=E5=8A=A0CQRS=E6=A8=A1?=
=?UTF-8?q?=E5=BC=8F=E7=9A=84=E6=8A=BD=E8=B1=A1=E5=A4=84=E7=90=86=E5=99=A8?=
=?UTF-8?q?=E5=9F=BA=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 实现了抽象命令处理器基类,支持带返回值和无返回值两种类型
- 创建了抽象通知处理器基类,提供统一的通知处理功能
- 添加了抽象查询处理器基类,支持泛型查询和结果类型
- 实现了抽象请求处理器基类,处理有响应和无响应的请求场景
- 集成了ContextAwareBase基类以提供上下文感知功能
- 使用Mediator库接口实现标准化的CQRS处理模式
---
.../cqrs/command/AbstractCommandHandler.cs | 55 +++++++++++++++++++
.../AbstractNotificationHandler.cs | 36 ++++++++++++
.../cqrs/query/AbstractQueryHandler.cs | 37 +++++++++++++
.../cqrs/request/AbstractRequestHandler.cs | 52 ++++++++++++++++++
4 files changed, 180 insertions(+)
create mode 100644 GFramework.Core/cqrs/command/AbstractCommandHandler.cs
create mode 100644 GFramework.Core/cqrs/notification/AbstractNotificationHandler.cs
create mode 100644 GFramework.Core/cqrs/query/AbstractQueryHandler.cs
create mode 100644 GFramework.Core/cqrs/request/AbstractRequestHandler.cs
diff --git a/GFramework.Core/cqrs/command/AbstractCommandHandler.cs b/GFramework.Core/cqrs/command/AbstractCommandHandler.cs
new file mode 100644
index 0000000..1cdd4e5
--- /dev/null
+++ b/GFramework.Core/cqrs/command/AbstractCommandHandler.cs
@@ -0,0 +1,55 @@
+// Copyright (c) 2026 GeWuYou
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+using GFramework.Core.rule;
+using Mediator;
+
+namespace GFramework.Core.cqrs.command;
+
+///
+/// 抽象命令处理器基类
+/// 继承自ContextAwareBase并实现ICommandHandler接口,为具体的命令处理器提供基础功能
+///
+/// 命令类型
+public abstract class AbstractCommandHandler : ContextAwareBase, ICommandHandler
+ where TCommand : ICommand
+{
+ ///
+ /// 处理指定的命令
+ /// 由具体的命令处理器子类实现命令处理逻辑
+ ///
+ /// 要处理的命令对象
+ /// 取消令牌,用于取消操作
+ /// 表示异步操作完成的ValueTask,返回Unit类型表示无返回值
+ public abstract ValueTask Handle(TCommand command, CancellationToken cancellationToken);
+}
+
+///
+/// 抽象命令处理器基类(带返回值版本)
+/// 继承自ContextAwareBase并实现ICommandHandler接口,为具体的命令处理器提供基础功能
+/// 支持泛型命令和结果类型,实现CQRS模式中的命令处理
+///
+/// 命令类型,必须实现ICommand接口
+/// 命令执行结果类型
+public abstract class AbstractCommandHandler : ContextAwareBase, ICommandHandler
+ where TCommand : ICommand
+{
+ ///
+ /// 处理指定的命令并返回结果
+ /// 由具体的命令处理器子类实现命令处理逻辑
+ ///
+ /// 要处理的命令对象
+ /// 取消令牌,用于取消操作
+ /// 表示异步操作完成的ValueTask,包含命令执行结果
+ public abstract ValueTask Handle(TCommand command, CancellationToken cancellationToken);
+}
\ No newline at end of file
diff --git a/GFramework.Core/cqrs/notification/AbstractNotificationHandler.cs b/GFramework.Core/cqrs/notification/AbstractNotificationHandler.cs
new file mode 100644
index 0000000..4060b8b
--- /dev/null
+++ b/GFramework.Core/cqrs/notification/AbstractNotificationHandler.cs
@@ -0,0 +1,36 @@
+// Copyright (c) 2026 GeWuYou
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+using GFramework.Core.rule;
+using Mediator;
+
+namespace GFramework.Core.cqrs.notification;
+
+///
+/// 抽象通知处理器基类
+/// 继承自ContextAwareBase并实现INotificationHandler接口,为具体的通知处理器提供基础功能
+/// 用于处理CQRS模式中的通知消息,支持异步处理
+///
+/// 通知类型,必须实现INotification接口
+public abstract class AbstractNotificationHandler : ContextAwareBase, INotificationHandler
+ where TNotification : INotification
+{
+ ///
+ /// 处理指定的通知消息
+ /// 由具体的通知处理器子类实现通知处理逻辑
+ ///
+ /// 要处理的通知对象
+ /// 取消令牌,用于取消操作
+ /// 表示异步操作完成的ValueTask
+ public abstract ValueTask Handle(TNotification notification, CancellationToken cancellationToken);
+}
\ No newline at end of file
diff --git a/GFramework.Core/cqrs/query/AbstractQueryHandler.cs b/GFramework.Core/cqrs/query/AbstractQueryHandler.cs
new file mode 100644
index 0000000..296c985
--- /dev/null
+++ b/GFramework.Core/cqrs/query/AbstractQueryHandler.cs
@@ -0,0 +1,37 @@
+// Copyright (c) 2026 GeWuYou
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+using GFramework.Core.rule;
+using Mediator;
+
+namespace GFramework.Core.cqrs.query;
+
+///
+/// 抽象查询处理器基类
+/// 继承自ContextAwareBase并实现IQueryHandler接口,为具体的查询处理器提供基础功能
+/// 支持泛型查询和结果类型,实现CQRS模式中的查询处理
+///
+/// 查询类型,必须实现IQuery接口
+/// 查询结果类型
+public abstract class AbstractQueryHandler : ContextAwareBase, IQueryHandler
+ where TQuery : IQuery
+{
+ ///
+ /// 处理指定的查询并返回结果
+ /// 由具体的查询处理器子类实现查询处理逻辑
+ ///
+ /// 要处理的查询对象
+ /// 取消令牌,用于取消操作
+ /// 表示异步操作完成的ValueTask,包含查询结果
+ public abstract ValueTask Handle(TQuery query, CancellationToken cancellationToken);
+}
\ No newline at end of file
diff --git a/GFramework.Core/cqrs/request/AbstractRequestHandler.cs b/GFramework.Core/cqrs/request/AbstractRequestHandler.cs
new file mode 100644
index 0000000..d2a15ac
--- /dev/null
+++ b/GFramework.Core/cqrs/request/AbstractRequestHandler.cs
@@ -0,0 +1,52 @@
+// Copyright (c) 2026 GeWuYou
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+using GFramework.Core.rule;
+using Mediator;
+
+namespace GFramework.Core.cqrs.request;
+
+///
+/// 抽象请求处理器基类,用于处理不返回具体响应的请求
+/// 继承自ContextAwareBase并实现IRequestHandler接口
+///
+/// 请求类型,必须实现IRequest[Unit]接口
+public abstract class AbstractRequestHandler : ContextAwareBase, IRequestHandler
+ where TRequest : IRequest
+{
+ ///
+ /// 处理请求的核心方法
+ ///
+ /// 要处理的请求对象
+ /// 取消令牌,用于取消操作
+ /// 表示异步操作的ValueTask,完成时返回Unit值
+ public abstract ValueTask Handle(TRequest request, CancellationToken cancellationToken);
+}
+
+///
+/// 抽象请求处理器基类,用于处理需要返回具体响应的请求
+/// 继承自ContextAwareBase并实现IRequestHandler接口
+///
+/// 请求类型,必须实现IRequest[TResponse]接口
+/// 响应类型
+public abstract class AbstractRequestHandler : ContextAwareBase,
+ IRequestHandler where TRequest : IRequest
+{
+ ///
+ /// 处理请求并返回响应的核心方法
+ ///
+ /// 要处理的请求对象
+ /// 取消令牌,用于取消操作
+ /// 表示异步操作的ValueTask,完成时返回处理结果
+ public abstract ValueTask Handle(TRequest request, CancellationToken cancellationToken);
+}
\ No newline at end of file