公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

.NET 結(jié)果與錯(cuò)誤處理利器 FluentResults

freeflydom
2024年8月2日 15:42 本文熱度 1743

前言

在項(xiàng)目開發(fā)中,方法返回的結(jié)果(成功或失敗)對(duì)我們開發(fā)來說很重要。傳統(tǒng)方法,如通過異常來指示錯(cuò)誤或使用特定的返回類型(如布爾值加輸出參數(shù)),雖然有效,但可能缺乏直觀性和靈活性。

FluentResults庫(kù)應(yīng)運(yùn)而生,它以一種既流暢又富有表達(dá)力的方式,極大地優(yōu)化了這一過程。通過使用FluentResults,能夠以一種更加自然和易于理解的方式傳遞操作結(jié)果,包括成功狀態(tài)、錯(cuò)誤信息、警告以及額外信息,提高代碼的可讀性和可維護(hù)性。

這種方式不僅讓錯(cuò)誤處理更加集中和一致,還使得代碼結(jié)構(gòu)更加清晰,邏輯更加流暢。

項(xiàng)目介紹

FluentResults 是一個(gè)在 .NET 環(huán)境中廣泛使用的庫(kù),它提供了一種優(yōu)雅的方式來處理方法執(zhí)行的結(jié)果和錯(cuò)誤。

使用 FluentResults,可以很容易地創(chuàng)建包含成功值、錯(cuò)誤、警告或信息的對(duì)象,并通過鏈?zhǔn)秸{(diào)用來處理這些對(duì)象。

那么如何使用 FluentResults 來優(yōu)雅地處理結(jié)果和錯(cuò)誤信息呢?

使用 FluentResults

1、安裝 FluentResults

首先,在項(xiàng)目中安裝 FluentResults,可以通過 NuGet 包管理器來安裝。在 Visual Studio 中也可以通過 NuGet 包管理器控制臺(tái)輸入以下命令:

Install-Package FluentResults

或者,在項(xiàng)目文件中添加 NuGet 包引用。

 

2、創(chuàng)建 Result 對(duì)象

使用 Result 類的靜態(tài)方法來創(chuàng)建結(jié)果對(duì)象。Result 類提供了多種方法來創(chuàng)建不同類型的結(jié)果,例如成功、失敗、帶有警告或信息的成功等。

using FluentResults;  


static  void Main(string[] args)

{

     var result = IsInteger("");


     if (result.IsSuccess)

     {

         Console.WriteLine($"結(jié)果:{result.Value} ");

     }

     else

     {

         Console.WriteLine($"結(jié)果:{result.Reasons[0].Message}|{result.Errors[0].Message}");

     }

}


public static Result<int>  IsInteger(string input)

{

     // 假設(shè)輸入為空或null,我們可以選擇認(rèn)為它不是數(shù)字  

     if (string.IsNullOrWhiteSpace(input))

     {

         return Result.Fail<int>("輸入為空或null,無法判斷是否是數(shù)字");

     }

     // 使用int.TryParse嘗試將輸入轉(zhuǎn)換為整數(shù)  

     // 如果轉(zhuǎn)換成功,out參數(shù)將包含轉(zhuǎn)換后的值,方法返回true  

     // 如果轉(zhuǎn)換失敗,方法返回false  

     if (int.TryParse(input, out int result))

     {

         return Result.Ok(result);

     }

     // 如果無法轉(zhuǎn)換為整數(shù),則認(rèn)為輸入不是數(shù)字  

     return Result.Fail<int>("輸入不是數(shù)字");

}

運(yùn)行結(jié)果

 

通過使用Result 類我們可以看到,方法運(yùn)行返回了標(biāo)準(zhǔn)的接口參數(shù),包括IsSuccess,Message,Errors等參數(shù),幫我們快速實(shí)現(xiàn)返回結(jié)構(gòu)。

3、鏈?zhǔn)教幚斫Y(jié)果

FluentResults 允許你通過鏈?zhǔn)秸{(diào)用來處理結(jié)果,這使得錯(cuò)誤處理和邏輯流程更加清晰和直觀。

需要注意的是FluentResults 本身的 Result 類型并不直接提供 OnSuccess 和 OnFailure 這樣的鏈?zhǔn)椒椒ǎ驗(yàn)檫@些方法可能是在 FluentResults 的某個(gè)版本中以擴(kuò)展方法的形式添加的,或者是在基于 FluentResults 的自定義擴(kuò)展中定義的。

自定義擴(kuò)展類 

/// <summary>

   /// Result 擴(kuò)展方法

   /// </summary>

   public static class ResultExtensions

   {

       /// <summary>

       /// 成功回調(diào)

       /// </summary>

       /// <param name="result"></param>

       /// <param name="successAction"></param>

       /// <returns></returns>

       public static Result OnSuccess(this Result result, Action successAction)

       {

           if (result.IsSuccess)

           {

               successAction?.Invoke();

           }

           return result; // 返回結(jié)果以支持鏈?zhǔn)秸{(diào)用  

       }


       /// <summary>

       /// 失敗回調(diào)

       /// </summary>

       /// <param name="result"></param>

       /// <param name="failureAction"></param>

       /// <returns></returns>

       public static Result OnFailure(this Result result, Action<IError> failureAction)

       {

           if (!result.IsSuccess && result.Errors!= null)

           {

               foreach (var error in result.Errors)

               {

                   failureAction?.Invoke(error);

               }

           }

           return result; // 返回結(jié)果以支持鏈?zhǔn)秸{(diào)用  

       }

   }

自定義方法

/// <summary>

/// 驗(yàn)證輸入字符串是否為整數(shù)

/// </summary>

/// <param name="input"></param>

/// <returns></returns>

public static Result IsIntegerInfo(string input)

{

    // 假設(shè)輸入為空或null,我們可以選擇認(rèn)為它不是數(shù)字  

    if (string.IsNullOrWhiteSpace(input))

    {

        return Result.Fail("輸入為空或null,無法判斷是否是數(shù)字");

    }

    // 使用int.TryParse嘗試將輸入轉(zhuǎn)換為整數(shù)  

    // 如果轉(zhuǎn)換成功,out參數(shù)將包含轉(zhuǎn)換后的值,方法返回true  

    // 如果轉(zhuǎn)換失敗,方法返回false  

    if (int.TryParse(input, out int result))

    {

        return Result.Ok();

    }

    // 如果無法轉(zhuǎn)換為整數(shù),則認(rèn)為輸入不是數(shù)字  

    return Result.Fail("輸入不是數(shù)字");

}

調(diào)用示例 

var result = IsIntegerInfo("")

     .OnSuccess(() =>

     {

             // 處理成功的情況  

             Console.WriteLine("Success!");

     })

     .OnFailure(error =>

     {

         // 處理失敗的情況  

         Console.WriteLine("Failed: " + error.Message);

     });

 // 注意:在 OnSuccess 或 OnFailure 中使用 result 變量可能不是安全的,  

 // 因?yàn)檫@些回調(diào)可能在這些回調(diào)執(zhí)行之前就被修改了。  

 // 更好的做法是在 OnSuccess/OnFailure 的 lambda 表達(dá)式中使用局部變量。

運(yùn)行結(jié)果

 

在這個(gè)示例中定義了兩個(gè)擴(kuò)展方法 OnSuccess 和 OnFailure,它們分別接受成功和失敗時(shí)要執(zhí)行的回調(diào)函數(shù)。這些方法首先檢查 Result 對(duì)象的狀態(tài),然后根據(jù)狀態(tài)調(diào)用相應(yīng)的回調(diào)函數(shù)。最后,它們返回原始的 Result 對(duì)象,以支持鏈?zhǔn)秸{(diào)用。

請(qǐng)注意,示例是為了說明目的而簡(jiǎn)化的,并且可能不包含 FluentResults 庫(kù)中實(shí)際可用的所有功能和優(yōu)化。在實(shí)際應(yīng)用中,應(yīng)該查看 FluentResults 的文檔和源代碼,以了解提供的具體功能。

4、FluentResults 高級(jí)特性

FluentResults提供許多高級(jí)特性,如鏈?zhǔn)秸{(diào)用、自定義錯(cuò)誤類型、以及包含額外數(shù)據(jù)和元數(shù)據(jù)的錯(cuò)誤對(duì)象。

例如,可以使用Result.Fail的重載版本來包含更多的上下文信息

return Result.Fail("輸入錯(cuò)誤.").WithError("The input value must be greater than zero.");

5、自定義 Result 類型

FluentResults 還支持通過繼承 Result 類來創(chuàng)建自定義的結(jié)果類型,以便在結(jié)果中攜帶額外的數(shù)據(jù)或狀態(tài)。

public class CommonResult

{

    public Result Result { get; }

    public string MyData { get; }


    public CommonResult(Result result, string myData)

    {

        Result = result;

        MyData = myData;

        Console.WriteLine($"{nameof(CommonResult)}: {MyData}|{result}");

    }

}

調(diào)用示例

public static CommonResult DemoResult(string input)

 {

     bool isSuccess =false;

     string errorMessage = "輸入的字符串不是數(shù)字";

     string myData = "測(cè)試一下";


     Result result = isSuccess ? Result.Ok() : Result.Fail(errorMessage);

     return new CommonResult(result, myData);

 }

運(yùn)行結(jié)果

 

通過以上步驟,可以在 .NET 應(yīng)用快速、方便的使用 FluentResults 來處理結(jié)果和錯(cuò)誤。可以提高代碼的可讀性和可維護(hù)性,還可以使錯(cuò)誤處理更加集中和統(tǒng)一規(guī)范。

使用場(chǎng)景

API 開發(fā):在處理 HTTP 請(qǐng)求和響應(yīng)時(shí),F(xiàn)luentResults 構(gòu)建清晰、一致和易于理解的錯(cuò)誤響應(yīng)。

業(yè)務(wù)邏輯驗(yàn)證:在執(zhí)行業(yè)務(wù)邏輯驗(yàn)證時(shí),F(xiàn)luentResults 可以驗(yàn)證多個(gè)錯(cuò)誤,并一次性返回。

復(fù)雜操作的結(jié)果處理:當(dāng)需要處理包含多個(gè)步驟的復(fù)雜操作時(shí),F(xiàn)luentResults 可以幫助管理每個(gè)步驟的結(jié)果,并將它們組合成一個(gè)最終的結(jié)果。

總結(jié)

FluentResults 提供了豐富的 API,可以靈活使用,與現(xiàn)有的 .NET 代碼庫(kù)和框架集成,如 ASP.NET Core、Entity Framework 等,還可以與其他第三方庫(kù)一起使用,以提供更全面的錯(cuò)誤處理和結(jié)果功能。

如果你的項(xiàng)目中需要一種更好的方式來處理結(jié)果,并希望提高代碼的可讀性和可維護(hù)性,那么 FluentResults 是一個(gè)不錯(cuò)的選擇。

開源地址

https://github.com/altmann/FluentResults


轉(zhuǎn)自https://www.cnblogs.com/1312mn/p/18336221



該文章在 2024/8/2 15:42:51 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产尤物精品自 | 国产欧美日韩在线中文一区 | 91精品影视 | 韩国无码无遮挡在线观看 | 国产激情久久亚洲欧美视频在线 | 国产在线精品一区二区不卡麻 | 69国产成人精品午夜福中文 | 国产精品女同在线调教 | 国产盗摄高清在线播放 | 精品人妻一区2区三区 | av在线播放五月天 | 国产夜色精品一区二区 | 成人合成mv福利视频 | 国产午夜激无码av毛片不 | 国产成人黄网在线免 | 国产成人免费高清视频在线观看 | 国产精品亚洲一区二区在线观 | 国内精品视频自在欧美一区 | 韩国日本免费高清观看 | 国产精品爆乳奶水无码视频免費 | 91国内偷拍国内 | 国产成人精品免费视频版大全软件 | 国产成人高清激情视频在线观看 | 精品国产一区二区三区免费91 | 国产成人综合色在线观看网站 | 国产精品一区不卡在线观看 | 妓女妓女一区二区三 | 91国内精品视频 | 91免费无 | 国产日韩久久久久精品 | 成人精品动漫一区二区 | 国产精品成人一区 | 高清无码一区二区 | 丰满少妇性开放视频 | 潮喷失禁大喷水无码 | 2025国产精华国产精品 | 国模国产精品嫩模大尺度视频 | 国产精品三级av及在线观看 | 丰满的少妇69式视频在线观看 | 国产av激情 | 精品少妇人妻av无码久久 |