AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

消滅代碼中的 if :請求參數(shù)校驗的優(yōu)雅之道

來源: 責編: 時間:2024-06-19 15:36:44 138觀看
導讀在軟件開發(fā)中,參數(shù)校驗是一個非常重要的環(huán)節(jié)。它不僅能確保數(shù)據(jù)的完整性和準確性,還能在一定程度上防止?jié)撛诘陌踩L險。然而,傳統(tǒng)的參數(shù)校驗方法往往充斥著大量的if語句,這不僅讓代碼變得冗長且難以維護,還降低了代碼的可

在軟件開發(fā)中,參數(shù)校驗是一個非常重要的環(huán)節(jié)。它不僅能確保數(shù)據(jù)的完整性和準確性,還能在一定程度上防止?jié)撛诘陌踩L險。然而,傳統(tǒng)的參數(shù)校驗方法往往充斥著大量的if語句,這不僅讓代碼變得冗長且難以維護,還降低了代碼的可讀性和優(yōu)雅性。2S928資訊網(wǎng)——每日最新資訊28at.com

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

2S928資訊網(wǎng)——每日最新資訊28at.com

使用特性(Attributes)進行校驗

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

下面是一個簡單的例子,展示如何使用自定義特性進行參數(shù)校驗:2S928資訊網(wǎng)——每日最新資訊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);            }            // 可以根據(jù)需要添加更多的校驗邏輯        }    }}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值以觸發(fā)校驗失敗        Validator.ValidateParameters(method, parameters); // 這行會拋出ArgumentNullException異常,因為param1為null且被標記為[NotNull]        // 如果校驗通過,則繼續(xù)執(zhí)行方法體        // method.Invoke(service, parameters); // 實際使用時,在校驗通過后再調用方法    }}

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

使用FluentValidation庫

除了使用自定義特性外,我們還可以利用現(xiàn)有的校驗庫來簡化參數(shù)校驗。FluentValidation是一個流行的.NET校驗庫,它提供了豐富的校驗規(guī)則和友好的API。2S928資訊網(wǎng)——每日最新資訊28at.com

下面是一個使用FluentValidation進行參數(shù)校驗的例子:2S928資訊網(wǎng)——每日最新資訊28at.com

首先,安裝FluentValidation NuGet包:2S928資訊網(wǎng)——每日最新資訊28at.com

Install-Package FluentValidation

然后,創(chuàng)建一個校驗器類:2S928資訊網(wǎng)——每日最新資訊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");        // 可以根據(jù)需要添加更多的校驗規(guī)則    }}public class ExampleRequest{    public string Param1 { get; set; }    public int Param2 { get; set; }}

在業(yè)務邏輯中使用校驗器:2S928資訊網(wǎng)——每日最新資訊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); // 這里可以自定義異常處理邏輯        }        // 如果校驗通過,則繼續(xù)執(zhí)行方法體    }}

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

本文鏈接:http://www.tebozhan.com/showinfo-26-94850-0.html消滅代碼中的 if :請求參數(shù)校驗的優(yōu)雅之道

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

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

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

標簽:
  • 熱門焦點
  • 一年經(jīng)驗在二線城市面試后端的經(jīng)驗分享

    忠告這篇文章只適合2年內工作經(jīng)驗、甚至沒有工作經(jīng)驗的朋友閱讀。如果你是2年以上工作經(jīng)驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • JavaScript學習 -AES加密算法

    引言在當今數(shù)字化時代,前端應用程序扮演著重要角色,用戶的敏感數(shù)據(jù)經(jīng)常在前端進行加密和解密操作。然而,這樣的操作在網(wǎng)絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數(shù)據(jù)
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術的發(fā)展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱由于業(yè)務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業(yè)務走向消亡。騰訊在長音頻領域還在摸索。為
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態(tài)LT(ID:LingTai_LT)2023年,出海市場戰(zhàn)況空前,中國創(chuàng)業(yè)者在海外紛紛摩拳擦掌,以期能夠把中國的商業(yè)模式、創(chuàng)業(yè)理念、戰(zhàn)略打法輸出海外,他們依
  • 品牌洞察丨服務本地,美團直播成效幾何?

    來源:17PR7月11日,美團App首頁推薦位出現(xiàn)&ldquo;美團直播&rdquo;的固定入口。在直播聚合頁面,外賣&ldquo;神槍手&rdquo;直播間、美團旅行直播間、美團買菜直播間等均已上線,同時
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創(chuàng) 作者|程心 羅輯2023年之前,對于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新業(yè)務到 2022 年底還是 0,希望 2023 年出來一個 1。&rdquo;這是2022年底,李彥宏
  • 攜眾多高端產(chǎn)品亮相ChinaJoy,小米帶來一場科技與人文的視聽盛宴

    7月28日,全球數(shù)字娛樂領域最具知名度與影響力的年度盛會中國國際數(shù)碼互動娛樂展覽會(簡稱ChinaJoy)在上海新國際博覽中心盛大開幕。作為全球領先的科
  • 回歸OPPO兩年,一加贏了銷量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創(chuàng)佳績。今年618期間,一加手機全渠道銷量同比增長362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top