<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#封裝FluentValidation

      FluentValidation是一個非常強(qiáng)大的用于構(gòu)建強(qiáng)類型驗證規(guī)則的 .NET 框架,幫程序員解決了繁瑣的校驗問題,用起來非常爽,但我還是遇到了一件非常不爽的事情,如下代碼所示:

      public class UserInformationValidator : AbstractValidator<UserInformation>
       {
       public UserInformationValidator()
       {
           RuleFor(o => o.UserName).Length(2, 20).WithMessage("姓名長度輸入錯誤");
           RuleFor(o => o.Sex).Must(o=>o=="男"||o=="女").WithMessage("性別輸入錯誤");
           RuleFor(o => o.Age).ExclusiveBetween(0, 200).WithMessage("年齡輸入錯誤");
           RuleFor(o => o.Email).EmailAddress().WithMessage("郵箱輸入錯誤");
        }
       }
        
        
         static void Main(string[] args)
              {

                  UserInformation userInformation = new UserInformation();
                  userInformation.UserName = "";
                  userInformation.Sex = "女";
                  userInformation.Age = 2200;
                  userInformation.Email = "xxxxx";
                  UserInformationValidator validationRules = new UserInformationValidator();
                  var result=   validationRules.Validate(userInformation);
                  if (!result.IsValid)
                  {
                    Console.WriteLine( string.Join(Environment.NewLine, result.Errors.Select(x => x.ErrorMessage).ToArray()));
                  }

              }

      我們每驗證一個對象,就要新建一個類型的驗證器 ,如上的UserInformationValidator ,雖然這樣寫邏輯上沒有任何問題,但我有潔癖哈,接下來我們試著封裝一下,嘿嘿,用更少的代碼做更多的事情。

      安裝

      在創(chuàng)建任何驗證器之前,您需要在項目中添加對 FluentValidation.dll 的引用。最簡單的方法是使用 NuGet 包管理器或 dotnet CLI。

      模板化代碼封裝探索

      將模板化的代碼提取到父類中

      仔細(xì)看上面的代碼你會發(fā)現(xiàn),我們每新建一個驗證器,就必須要創(chuàng)建一個繼承自AbstractValidator的類,其中T是您希望驗證的類的類型,封裝一個驗證器父類

      public class CommonVaildator<T> : AbstractValidator<T>
      {

      }
      增加驗證規(guī)則

      真正的業(yè)務(wù)邏輯是寫在UserInformationValidator驗證器里面的,而這塊代碼中只需要拿到RuleFor即可,其它的統(tǒng)一封裝到父類中,對不對,我們按照這個思路代碼,封裝一個長度驗證器規(guī)則。首先讓我們看看RuleFor的原型

        public IRuleBuilderInitial<T, TProperty> RuleFor<TProperty>(Expression<Func<T, TProperty>> expression)

      它的參數(shù)是一個Func委托,那么Expression是什么呢?Experssion是一種表達(dá)式樹!

      表達(dá)式樹是一種允許將lambda表達(dá)式表示為樹狀數(shù)據(jù)結(jié)構(gòu)而不是可執(zhí)行邏輯的代碼。

      在C#中是Expression來定義的,它是一種語法樹,或者說是一種數(shù)據(jù)結(jié)構(gòu)。其主要用于存儲需要計算、運(yùn)算的一種結(jié)構(gòu),它只提供存儲功能,不進(jìn)行運(yùn)算。通常Expression是配合Lambda一起使用,這里就不做過多的解釋了!那么我們就能很輕易的封裝出長度驗證器規(guī)則了!

           public void LengthVaildator(Expression<Func<T, string>> expression, int min, int max, string Message)
              {
                  RuleFor(expression).Length(min, max).WithMessage(Message);
              }

      同理,我們也可以接著封裝謂詞驗證器規(guī)則 郵箱驗證器規(guī)則等等

            public void MustVaildator(Expression<Func<T, string>> expression ,Func<T,string, bool> expression2, string Message)
              {
                  RuleFor(expression).Must(expression2).WithMessage(Message);
              }
                public void EmailAddressVaildator(Expression<Func<T, string>> expression, string Message)
              {
                  RuleFor(expression).EmailAddress().WithMessage(Message);
              }
      封裝驗證方法

      上面我們把驗證器封裝好了,那么將  var result=   validationRules.Validate(userInformation);這種驗證方法封裝一下不是手到擒來,代碼如下

        public static string ModelValidator<T>(T source, AbstractValidator<T> sourceValidator) where T : class
              {
                  var results = sourceValidator.Validate(source);
                  if (!results.IsValid)
                      return string.Join(Environment.NewLine, results.Errors.Select(x => x.ErrorMessage).ToArray());
                  else
                      return "";

              }
      測試封裝后的代碼
                    CommonVaildator<UserInformation> commonUserInformation = new CommonVaildator<UserInformation>();
                  commonUserInformation.LengthVaildator(o => o.UserName, 2, 30, "姓名長度輸入錯誤");
                  commonUserInformation.MustVaildator(o => o.Sex, (user, _) => user.Sex =="男"||user.Sex=="女" , "性別輸入錯誤");
                  commonUserInformation.ExclusiveBetweenVaildator(o=>o.Age,0, 200, "年齡輸入錯誤");
                  commonUserInformation.EmailAddressVaildator(o => o.Email, "郵箱輸入錯誤");
                  string msg= VaildatorHelper.ModelValidator(userInformation, commonUserInformation);
                  Console.WriteLine(msg);

      這樣代碼看起來是不是就簡潔多了,我這里就只封裝了四種驗證規(guī)則,其它的我就不在此封裝了。

      總結(jié)

      文章來源于工作中的點(diǎn)點(diǎn)滴滴,這也是我的即興封裝,大家要是有更好的封裝代碼,歡迎交流,獨(dú)樂樂不如眾樂樂,本篇就說到這里啦,希望對您有幫助。

      鳴謝:

      https://mp.weixin.qq.com/s?__biz=MzU3Njc2NzMwNg==&mid=2247485849&idx=1&sn=00148045c104add2db906e17e9d1e677&chksm=fd0f9dbcca7814aa0672ea4f90724c6658f20697b1ccf37cffc75852ad5d2234ad17a2ea58bd#rd

      posted @ 2022-09-19 10:14  春光牛牛  閱讀(255)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 在线天堂最新版资源| 中文字幕乱码在线人视频| 中文日产幕无线码一区中文| 欧美日韩人成综合在线播放| 亚洲熟少妇一区二区三区| 镇雄县| 日韩中文字幕一二三视频| 99久久婷婷国产综合精品青草漫画 | 一区二区三区精品视频免费播放| 国产免费无遮挡吃奶视频| 2019香蕉在线观看直播视频| 香蕉久久久久久久AV网站| 中文字幕乱码在线播放| 国产欧美va欧美va在线| 久青草精品视频在线观看| 蛟河市| 国产中文字幕日韩精品| 国产日韩精品欧美一区灰| 视频网站在线观看不卡| 精品久久久久久国产| 国产一级小视频| 日韩精品在线观看一二区| 亚洲精品麻豆一区二区| 无码国模国产在线观看免费| 国产成人女人在线观看| 亚洲2区3区4区产品乱码2021| 97精品人妻系列无码人妻| 欧美、另类亚洲日本一区二区| 国产盗摄视频一区二区三区| 国产精品av中文字幕| 免费无码无遮挡裸体视频在线观看 | 国产二区三区不卡免费| 亚洲精品自拍在线视频| 精精国产xxx在线观看| 99精品热在线在线观看视| 亚洲天堂成年人在线视频| 亚洲香蕉伊综合在人在线| 久久精品人人槡人妻人人玩av| 少妇无套内射中出视频| 亚洲综合在线日韩av| 开心五月激情综合久久爱|