从重复代码到优雅解决方案:TinyResult如何重塑.NET结果处理范式

作者:微信公众号:【架构师老卢】
5-1 9:0
6

🚀 背景:当重复模式催生新工具 作为开发者,我们总会遇到某些代码模式反复出现。最终要么决定"该为这个写个工具包了",要么被迫在每个项目里复制粘贴相同代码。我选择了第一条路 😊

在.NET生态中,Result和Result已成为处理成功/失败场景的主流方案——特别是替代那些嵌套地狱般的try-catch块。但我始终在思考: "难道没有更简单、更独立、专注核心功能的解决方案吗?"

市面上的现有方案要么藏在大型库深处,要么过度复杂化。这促使我打造了自己的轻量级解决方案——TinyResult。


✨ TinyResult核心价值 这个开源库的诞生源于三个核心追求:

  1. 极简主义:无复杂结构、继承链或DSL定义
  2. 清晰表达:明确区分成功/失败,附带消息和数据
  3. 全场景兼容:无缝适配任何.NET项目

🛠️ 基础用法实战 快速安装

dotnet add package TinyResult

创建结果对象

var success = Result<int>.Success(42);
var failure = Result<int>.Failure(ErrorCode.NotFound, "Item not found");

模式匹配处理

var message = success.Match(
    value => $"Success: {value}",
    error => $"Error: {error.Message}"
);

🔄 流水线式操作(Fluent API) 构建链式处理流程:

var result = ResultPipeline<int>
    .Start(10)
    .Map(x => x * 2)
    .Validate(x => x > 0, ErrorCode.ValidationError, "数值必须为正")
    .OnSuccess(x => Console.WriteLine($"结果值:{x}"))
    .OnFailure(error => Console.WriteLine($"错误:{error.Message}"))
    .Build();

🔍 错误处理增强 结构化错误信息

var error = Error.Create(
    ErrorCode.ValidationError,
    "输入无效",
    new Dictionary<string, object>
    {
        { "字段", "邮箱" },
        { "值", "invalid-email" }
    }
);

异步支持

var asyncResult = await Result.FromTryAsync(
    async () => await GetDataAsync(),
    ex => Error.Create(ErrorCode.InternalError, "数据获取失败", ex)
);

🧩 多结果合并 简单合并

var combinedResult = Result.Combine(
    Result<int>.Success(10),
    Result<int>.Success(20),
    (v1, v2) => v1 + v2
);

批量合并

var combinedResults = Result.Combine(
    new[]
    {
        Result<int>.Success(1),
        Result<int>.Success(2),
        Result<int>.Success(3)
    }
);

🔄 验证链式调用

var validationResult = ValidationResult.Create()
    .AddError("邮箱", "格式无效")
    .AddError("密码", "长度不足");

💡 设计哲学 与传统方案对比: | 特性 | TinyResult | 传统try-catch | |---------------------|--------------------------|------------------------| | 代码可读性 | 声明式流水线 | 嵌套控制流 | | 错误信息 | 结构化元数据 | 异常堆栈跟踪 | | 异步支持 | 原生async/await | 需手动封装 | | 类型安全 | 编译时检查 | 运行时异常 |


技术宣言:
当你的代码开始出现"if (result.IsSuccess)"的重复模式时,就该考虑引入TinyResult了。它不是简单封装——而是通过声明式API重构错误处理逻辑,让业务代码回归纯粹的表达力。

相关留言评论
昵称:
邮箱:
阅读排行