日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

消滅代碼中的 if :請求參數校驗的優雅之道

來源: 責編: 時間:2024-06-19 15:36:44 135觀看
導讀在軟件開發中,參數校驗是一個非常重要的環節。它不僅能確保數據的完整性和準確性,還能在一定程度上防止潛在的安全風險。然而,傳統的參數校驗方法往往充斥著大量的if語句,這不僅讓代碼變得冗長且難以維護,還降低了代碼的可

在軟件開發中,參數校驗是一個非常重要的環節。它不僅能確保數據的完整性和準確性,還能在一定程度上防止潛在的安全風險。然而,傳統的參數校驗方法往往充斥著大量的if語句,這不僅讓代碼變得冗長且難以維護,還降低了代碼的可讀性和優雅性。1A628資訊網——每日最新資訊28at.com

那么,如何干掉這些煩人的if語句,讓參數校驗變得更加優雅呢?下面,我們將通過C#的例子來探討這個問題。1A628資訊網——每日最新資訊28at.com

1A628資訊網——每日最新資訊28at.com

使用特性(Attributes)進行校驗

C# 提供了豐富的特性(Attributes)機制,我們可以利用這一機制來進行參數校驗。通過定義自定義的特性,并將這些特性應用于方法的參數上,我們可以在運行時自動進行參數校驗,從而避免了大量的if語句。1A628資訊網——每日最新資訊28at.com

下面是一個簡單的例子,展示如何使用自定義特性進行參數校驗:1A628資訊網——每日最新資訊28at.com

using System;using System.Reflection;// 定義一個自定義的校驗特性[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]public class NotNullAttribute : Attribute{    // 可以在這里添加一些自定義的邏輯}public class Validator{    public static void ValidateParameters(MethodInfo method, object[] parameters)    {        ParameterInfo[] paramInfos = method.GetParameters();        for (int i = 0; i < paramInfos.Length; i++)        {            object param = parameters[i];            NotNullAttribute attr = paramInfos[i].GetCustomAttribute<NotNullAttribute>();            if (attr != null && param == null)            {                throw new ArgumentNullException(paramInfos[i].Name);            }            // 可以根據需要添加更多的校驗邏輯        }    }}public class ExampleService{    public void ExampleMethod([NotNull] string param1, int param2)    {        // 方法體    }}public class Program{    public static void Main(string[] args)    {        ExampleService service = new ExampleService();        MethodInfo method = typeof(ExampleService).GetMethod("ExampleMethod");        object[] parameters = new object[] { null, 123 }; // 這里故意傳入一個null值以觸發校驗失敗        Validator.ValidateParameters(method, parameters); // 這行會拋出ArgumentNullException異常,因為param1為null且被標記為[NotNull]        // 如果校驗通過,則繼續執行方法體        // method.Invoke(service, parameters); // 實際使用時,在校驗通過后再調用方法    }}

在這個例子中,我們定義了一個NotNullAttribute特性,并將其應用于ExampleMethod方法的param1參數上。然后,我們創建了一個Validator類,該類具有一個靜態方法ValidateParameters,該方法接受一個MethodInfo對象和一個參數數組,并對參數進行校驗。如果某個參數被標記為NotNull但值為null,則該方法會拋出一個ArgumentNullException異常。1A628資訊網——每日最新資訊28at.com

使用FluentValidation庫

除了使用自定義特性外,我們還可以利用現有的校驗庫來簡化參數校驗。FluentValidation是一個流行的.NET校驗庫,它提供了豐富的校驗規則和友好的API。1A628資訊網——每日最新資訊28at.com

下面是一個使用FluentValidation進行參數校驗的例子:1A628資訊網——每日最新資訊28at.com

首先,安裝FluentValidation NuGet包:1A628資訊網——每日最新資訊28at.com

Install-Package FluentValidation

然后,創建一個校驗器類:1A628資訊網——每日最新資訊28at.com

using FluentValidation;public class ExampleValidator : AbstractValidator<ExampleRequest>{    public ExampleValidator()    {        RuleFor(x => x.Param1).NotNull().WithMessage("Param1 cannot be null");        RuleFor(x => x.Param2).GreaterThan(0).WithMessage("Param2 must be greater than 0");        // 可以根據需要添加更多的校驗規則    }}public class ExampleRequest{    public string Param1 { get; set; }    public int Param2 { get; set; }}

在業務邏輯中使用校驗器:1A628資訊網——每日最新資訊28at.com

public class ExampleService{    private readonly ExampleValidator _validator;        public ExampleService()    {        _validator = new ExampleValidator();    }        public void ExampleMethod(ExampleRequest request)    {        ValidationResult result = _validator.Validate(request);        if (!result.IsValid)        {            throw new ValidationException(result.Errors); // 這里可以自定義異常處理邏輯        }        // 如果校驗通過,則繼續執行方法體    }}

在這個例子中,我們創建了一個ExampleValidator類,該類繼承了FluentValidation的AbstractValidator類,并定義了校驗規則。然后,在ExampleService類的ExampleMethod方法中,我們使用ExampleValidator對請求參數進行校驗。如果校驗失敗,我們拋出一個自定義的異常。這種方法使代碼更加清晰和易于維護,同時避免了大量的if語句。1A628資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-94850-0.html消滅代碼中的 if :請求參數校驗的優雅之道

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Go必知必會:并發編程的核心channel

下一篇: 趕緊試試 Python 3.12 吧,真的好用

標簽:
  • 熱門焦點
  • 小米平板5 Pro 12.4簡評:多專多能 兼顧影音娛樂的大屏利器

    疫情帶來了網課,網課盤活了安卓平板,安卓平板市場雖然中途停滯了幾年,但好的一點就是停滯的這幾年行業又有了新的發展方向,例如超窄邊框、高刷新率、多攝鏡頭組合等,這就讓安卓
  • 消息稱迪士尼要拍真人版《魔發奇緣》:女主可能也找黑人演員

    8月5日消息,迪士尼確實有點忙,忙著將不少動畫改成真人版,繼《美人魚》后,真人版《白雪公主》、《魔發奇緣》也在路上了。據外媒消息稱,迪士尼將打造真人版
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • 微軟邀請 Microsoft 365 商業用戶,測試視頻編輯器 Clipchamp

    8 月 1 日消息,微軟近日宣布即將面向 Microsoft 365 商業用戶,開放 Clipchamp 應用,邀請用戶通過該應用來編輯視頻。微軟于 2021 年收購 Clipchamp,隨后開始逐步整合到 Microsof
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
  • 上海舉辦人工智能大會活動,建設人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術、新產品、新應用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發展盛典人工
Top 主站蜘蛛池模板: 游戏| 永宁县| 泸溪县| 白朗县| 大足县| 湘潭市| 含山县| 上饶县| 阳城县| 宁南县| 桑植县| 鸡西市| 盐源县| 交口县| 仁怀市| 文水县| 集安市| 聂荣县| 江陵县| 甘肃省| 余姚市| 长沙县| 安康市| 依安县| 淮南市| 利辛县| 肇州县| 左权县| 九寨沟县| 富民县| 蒙城县| 安徽省| 锡林郭勒盟| 纳雍县| 抚顺县| 宁明县| 奉贤区| 沁源县| 大余县| 维西| 南阳市|