namespace Dpz.Core.MessageQueue.Models;
public abstract class MessageHandlerResult
{
/// <summary>
/// 处理是否成功
/// </summary>
public bool Success { get; set; }
/// <summary>
/// 错误消息(当 Success = false 时)
/// </summary>
public string? ErrorMessage { get; set; }
/// <summary>
/// 附加元数据
/// </summary>
public Dictionary<string, object>? Metadata { get; set; }
}
/// <summary>
/// 消息处理结果包装类
/// </summary>
/// <typeparam name="TResult">结果类型</typeparam>
public class MessageHandlerResult<TResult> : MessageHandlerResult
{
/// <summary>
/// 处理结果数据
/// </summary>
public TResult? Data { get; set; }
/// <summary>
/// 创建成功结果
/// </summary>
public static MessageHandlerResult<TResult> Ok(
TResult data,
Dictionary<string, object>? metadata = null
)
{
return new MessageHandlerResult<TResult>
{
Success = true,
Data = data,
Metadata = metadata,
};
}
/// <summary>
/// 创建失败结果
/// </summary>
public static MessageHandlerResult<TResult> Fail(
string errorMessage,
Dictionary<string, object>? metadata = null
)
{
return new MessageHandlerResult<TResult>
{
Success = false,
ErrorMessage = errorMessage,
Metadata = metadata,
};
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这段代码定义了一个消息队列处理结果的模型类体系,用于封装消息处理的结果状态和数据。让我详细解释一下:
代码结构分析
1. 基类 MessageHandlerResult
public abstract class MessageHandlerResult
这是一个抽象基类,定义了消息处理结果的基本属性:
Success: 布尔值,表示消息处理是否成功ErrorMessage: 可空字符串,当处理失败时存储错误信息Metadata: 可空字典,用于存储附加的元数据信息
2. 泛型派生类 MessageHandlerResult<TResult>
public class MessageHandlerResult<TResult> : MessageHandlerResult
这是一个泛型类,继承自基类,增加了:
Data: 泛型属性,存储具体的处理结果数据
3. 静态工厂方法
Ok 方法
public static MessageHandlerResult<TResult> Ok(TResult data, Dictionary<string, object>? metadata = null)
- 用于创建成功的处理结果
- 设置
Success = true - 存储处理成功后的数据
- 可选的元数据参数
Fail 方法
public static MessageHandlerResult<TResult> Fail(string errorMessage, Dictionary<string, object>? metadata = null)
- 用于创建失败的处理结果
- 设置
Success = false - 存储错误信息
- 可选的元数据参数
使用场景
这个设计模式在消息队列系统中非常有用,典型使用场景包括:
// 成功处理示例
var successResult = MessageHandlerResult<string>.Ok("处理完成",
new Dictionary<string, object> { {"ProcessTime", DateTime.Now} });
// 失败处理示例
var failResult = MessageHandlerResult<string>.Fail("数据验证失败",
new Dictionary<string, object> { {"ErrorCode", "VALIDATION_ERROR"} });
// 使用结果
if (result.Success)
{
Console.WriteLine($"处理成功: {result.Data}");
}
else
{
Console.WriteLine($"处理失败: {result.ErrorMessage}");
}
设计优势
- 类型安全: 通过泛型确保返回数据的类型安全
- 统一接口: 所有消息处理器都返回统一的结果格式
- 便捷创建: 静态工厂方法提供简洁的创建方式
- 扩展性: Metadata 字典允许添加任意附加信息
- 清晰语义: 通过 Success 属性明确表示处理状态
这是一个典型的 Result Pattern 实现,广泛用于函数式编程和错误处理场景中。
评论加载中...