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}");
}

设计优势

  1. 类型安全: 通过泛型确保返回数据的类型安全
  2. 统一接口: 所有消息处理器都返回统一的结果格式
  3. 便捷创建: 静态工厂方法提供简洁的创建方式
  4. 扩展性: Metadata 字典允许添加任意附加信息
  5. 清晰语义: 通过 Success 属性明确表示处理状态

这是一个典型的 Result Pattern 实现,广泛用于函数式编程和错误处理场景中。

评论加载中...