LightResults:简洁高效的结果模式实践

LightResults:简洁高效的结果模式实践

LightResults An extremely light and modern Operation Result Pattern library for .NET. LightResults 项目地址: https://gitcode.com/gh_mirrors/li/LightResults

项目介绍

LightResults 是一个轻量级、现代化的 .NET 库,它提供了一种简单且灵活的结果模式(Result Pattern)实现。结果模式是一种表示操作结果(无论是成功还是遇到错误)的更明确、更结构化的方法。本项目受到 Michael Altmann 的 FluentResults 项目的启发。

项目技术分析

LightResults 旨在帮助开发者更好地处理操作结果,通过将成功或失败的结果封装在易于使用的对象中,增强了代码的可读性和可维护性。以下是该项目的一些技术亮点:

  • 轻量级:LightResults 仅包含实现结果模式所必需的组件。
  • 可扩展:简单的接口和基类使得库易于适配和扩展。
  • 不可变:结果和错误对象一旦创建就无法更改,保证了对象的不可变性。
  • 线程安全:错误列表和元数据字典使用不可变类,确保线程安全。
  • 现代化:基于最新版本的 .NET 开发,采用最新的最佳实践。
  • 本地化:在最新版本的 .NET 环境下编写、编译和测试。
  • 兼容性:作为 .NET Standard 2.0 库提供,支持数十种 .NET 版本。
  • 可修剪:从 .NET 7.0 开始,支持预先编译(AOT)。
  • 高性能:经过优化和基准测试,以实现最佳性能。

项目技术应用场景

LightResults 适用于任何需要明确表示操作结果的场景。以下是一些典型的使用场景:

  1. API 调用:在 Web API 中,返回 LightResults 结果对象而不是直接抛出异常,可以提供更丰富的错误信息。
  2. 业务逻辑:在业务逻辑中,使用 LightResults 可以更容易地处理复杂操作的中间结果。
  3. 数据验证:在对输入数据进行验证时,可以收集并返回所有错误,而不是在发现第一个错误时就停止。

项目特点

以下是 LightResults 的一些显著特点:

简单的类结构

LightResults 主要由三个类组成:ResultResult<TValue>Error

  • Result 类表示一个通用的结果,指示成功或失败。
  • Result<TValue> 类表示一个带有值的结果。
  • Error 类表示一个错误,包含消息和关联的元数据。

创建成功和失败的结果

成功结果可以通过 Ok 方法创建,失败结果可以通过 Fail 方法创建。

var successResult = Result.Ok();
var successResultWithValue = Result.Ok(349.4);

var failedResult = Result.Fail();
var failedResultWithMessage = Result.Fail("操作失败!");
var failedResultWithMessageAndMetadata = Result.Fail("操作失败!", ("异常", ex));

检查结果状态

结果具有 IsSuccessIsFailed 两个属性,它们是互斥的。

if (result.IsSuccess)
{
    // 结果成功,因此 IsFailed 将为 false。
}

if (result.IsFailed)
{
    // 结果失败,因此 IsSuccess 将为 false。
    if (result.Error.Message.Length > 0)
        Console.WriteLine(result.Error.Message);
    else
        Console.WriteLine("发生未知错误!");
}

获取值

从成功结果中获取值可以通过 Value 属性进行。

if (result.IsSuccess)
{
    var value = result.Value;
}

创建错误

错误可以带消息或不带消息创建。

var errorWithoutMessage = new Error();
var errorWithMessage = new Error("出错了!");

还可以带元数据创建。

var errorWithMetadataTuple = new Error(("键", "值"));
var metadata = new Dictionary<string, object> { { "键", "值" } };
var errorWithMetadataDictionary = new Error(metadata);

或者,带消息和元数据创建。

var errorWithMetadataTuple = new Error("出错了!", ("键", "值"));
var errorWithMetadataDictionary = new Error("出错了!", metadata);

自定义错误

为了表示特定的错误,可以创建继承自 Error 的自定义错误类。

public sealed class 资源未找到错误 : Error
{
    public 资源未找到错误()
        : base("资源无法找到。")
    {
    }
}

var notFoundError = new 资源未找到错误();
var notFoundResult = Result.Fail(notFoundError);

然后可以根据错误类型检查结果。

if (result.IsFailed && result.HasError<资源未找到错误>())
{
    // 看起来资源未找到,我们得采取一些措施!
}

结合元数据使用时,这可以特别有用,以处理异常。

public sealed class 未处理的异常错误 : Error
{
    public 未处理的异常错误(Exception ex)
        : base("发生未处理的异常。", ("异常", ex))
    {
    }
}

这样我们可以在代码中使用 try-catch 块,但返回结果而不是抛出异常。

public Result DoSomeWork()
{
    try
    {
        // 在这个方法中我们绝对不能抛出异常!
    }
    catch(Exception ex)
    {
        var unhandledExceptionError = new 未处理的异常错误(ex);
        return Result.Fail(unhandledExceptionError);
    }
    
    return Result.Ok();
}

通过创建错误工厂,可以进一步简化错误创建过程。

public static AppError
{
    public Result NotFound()
    {
        var notFoundError = new 资源未找到错误();
        return Result.Fail(notFoundError);
    }

    public Result UnhandledException(Exception ex)
    {
        var unhandledExceptionError = new 未处理的异常错误(ex);
        return Result.Fail(unhandledExceptionError);
    }
}

这样就能更清晰、更明确地描述结果。

public Result GetPerson(int id)
{
    var person = _database.GetPerson(id);
    
    if (person is null)
        return AppError.NotFound();
    
    return Result.Ok();
}

LightResults 以其简单性和易用性,为 .NET 开发者提供了一个强大的工具,以更好地处理和表示操作结果。

LightResults An extremely light and modern Operation Result Pattern library for .NET. LightResults 项目地址: https://gitcode.com/gh_mirrors/li/LightResults

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

资源下载链接为: https://pan.quark.cn/s/edc71405fcf0 物联网是一种将物与物、物与人通过网络连接起来的新兴技术。其产业结构包括感知层、传输层、平台与软件层以及应用层。在中国,物联网产业发展迅速,市场规模不断扩大,市场结构日益丰富,用户规模和终端连接数持续增长,同时投融资活动也较为活跃。 当前,物联网产业面临诸多挑战,例如安全性问题、标准与互操作性难题、系统的可扩展性限制、设备的功耗问题、系统的可靠性以及延迟问题等。然而,物联网产业也迎来了新的发展机遇,如技术创新、市场需求增长等。 国家出台了一系列全国性政策,涵盖感知层、通信层、平台层和应用层等方面,以推动物联网产业的发展。同时,物联网数据安全与数据合规问题也受到高度重视,相关法律法规不断完善。 感知层技术是物联网的基础,包括RFID无源物联网、毫米波雷达、激光雷达、柔性传感器、智能传感器、3D视觉传感器、MEMS传感器等。此外,北斗及卫星高精度定位技术也在感知层中发挥着重要作用。 传输层技术为物联网设备之间的通信提供了支持,包括5G、LTE Cat.1、6G、卫星通信、星闪、蓝牙、Wi-Fi、ZigBee、NFC、LiFi、LoRa等多种通信技术,这些技术各有特点,满足了不同场景的通信需求。 平台与软件层是物联网的核心,包括物联网平台产业、物联网操作系统、物联网数据库和物联网大模型产业等。这些技术和产业的发展为物联网的智能化应用提供了强大的支撑。 应用层是物联网产业的最终落脚点,涵盖了产业物联网和消费物联网的多个领域,如智慧城市、智能工业、车联网、智慧医疗、智慧园区、智慧农业、智慧零售、智慧能源、智慧物流等。这些领域的应用不断拓展,推动了物联网产业的快速发展。 物联网市场规模持续扩大,市场结构不断优化,用户规模和终端连接数呈现快速增长的趋势。这些数据表明物联网产业正处于快速发展的阶段,未来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔祯拓Belinda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值