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

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

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

      它山之玉可以重構(gòu):身份證號4(第四天)

      可以說,到了今天,我才真正能開始做我想要的重構(gòu)/改進(jìn)。之前,只是補充測試,調(diào)整了一下結(jié)構(gòu)。
      是的,非常的緩慢,這居然被稱為“敏捷”!? 你說奇怪不奇怪?
      還好,這種節(jié)奏適合我這種大齡青年,合用就好,關(guān)它是風(fēng)花還是雪月。

      ==》 測試覆蓋

      上一次漏掉了最重要的異步,測試覆蓋:

      4_1

      本以為會秀一個漂亮的100%覆蓋率的測試出來,人算不如天算,居然有一個方法是75%!
      (本文版權(quán)屬于? 2012 - 2013 予沁安

      4_2

      恩,無效的生日沒有測試。

      很簡單,就增加一個測試而已,就不在這羅嗦了。直接貼覆蓋率,顯擺一下。

      4_3

      再顯擺一下代碼質(zhì)量參數(shù):

      4_4

      復(fù)雜度 最大的就是構(gòu)造器了。可維護(hù)指標(biāo)還是不錯的 76分。

      ==>優(yōu)化改進(jìn):屬性,靜態(tài)設(shè)值和其他

      零零碎碎的改進(jìn),你可以如前面一樣,基于一個一個測試縱向改,也可以全部改完在一起測試,沒有太大關(guān)系,前者是嚴(yán)格的測試驅(qū)動。但是,我覺得不需太學(xué)術(shù)化,關(guān)鍵是,你的任務(wù)足夠小,能在今天完成,那就是合適。

      1。 把所有的信息塊改成屬性方式,因為,一個是Java與C#的區(qū)別,第二,把原代碼的緩沖生日的邏輯做到極致(極限編程?呵),一開始就緩沖(構(gòu)造器中)

       public string CardNumber { get;private set; }
       public string AddressCode { get; private set; }
       public DateTime BirthDate { get; private set; }
       public Gender Gender { get; private set; }


      2。數(shù)據(jù)解析放在構(gòu)造器中,并且獨立成方法,只是在構(gòu)造器中調(diào)用

      void extract()
              {
                  AddressCode = CardNumber.Substring(0, 6);
                  Gender = ((int) CardNumber[CARD_NUMBER_LENGTH - 2])%2 == 0 ? Gender.Female : Gender.Male;
                  BirthDate = extract_birth_date();
              }


      日期足夠復(fù)雜,所以又獨立出方法

      public DateTime extract_birth_date()
              {
                  try
                  {
                      return DateTime.ParseExact(CardNumber.Substring(6, 8), BIRTH_DATE_FORMAT, null);
                  }
                  catch (Exception e)
                  {
                      throw new ApplicationException("身份證的出生日期無效");
                  }
              }


      3。從之前的代碼分析參數(shù),看到構(gòu)造器復(fù)雜度太高,主要是幾個驗證。做一個改進(jìn),一個提出驗證方法,二個去掉null, empty的驗證,因為正則表達(dá)式已經(jīng)包含了。

       private void validate(string cardNumber)
              {
                  if (!SOCIAL_NUMBER_PATTERN.IsMatch(cardNumber))
                      throw new ApplicationException("Card Number has wrong charactor(s).");
      
                  if (cardNumber[CARD_NUMBER_LENGTH - 1] != verifier.verify(cardNumber))
                      throw new ApplicationException("Card Number verified code is not match.");
              }

       

      public SocialID(String cardNumber)
              {
                  validate(cardNumber);
                  CardNumber= cardNumber;
                  extract();
              }

       

      ==》OK,現(xiàn)在可以站起來,來杯咖啡,欣賞一下我們的成果

      可維護(hù)性提高到82,復(fù)雜度最高是validate() 3,

      4_5

      完全代碼,是不是很清晰了?

      using System;
      using System.Text.RegularExpressions;
      
      namespace Skight.eLiteWeb.Domain
      {
          public enum Gender
          {
              Female,
              Male
          }
          public class SocialID
          {
              private static Verifier verifier = new Verifier();
              private static String BIRTH_DATE_FORMAT = "yyyyMMdd";
              private static int CARD_NUMBER_LENGTH = 18;
              private static Regex SOCIAL_NUMBER_PATTERN = new Regex(@"^[0-9]{17}[0-9X]$");
      
              public SocialID(String cardNumber)
              {
                  validate(cardNumber);
                  CardNumber= cardNumber;
                  extract();
              }
      
              private void validate(string cardNumber)
              {
                  if (!SOCIAL_NUMBER_PATTERN.IsMatch(cardNumber))
                      throw new ApplicationException("Card Number has wrong charactor(s).");
      
                  if (cardNumber[CARD_NUMBER_LENGTH - 1] != verifier.verify(cardNumber))
                      throw new ApplicationException("Card Number verified code is not match.");
              }
              void extract()
              {
                  AddressCode = CardNumber.Substring(0, 6);
                  Gender = ((int) CardNumber[CARD_NUMBER_LENGTH - 2])%2 == 0 ? Gender.Female : Gender.Male;
                  BirthDate = extract_birth_date();
              }
              public DateTime extract_birth_date()
              {
                  try
                  {
                      return DateTime.ParseExact(CardNumber.Substring(6, 8), BIRTH_DATE_FORMAT, null);
                  }
                  catch (Exception e)
                  {
                      throw new ApplicationException("身份證的出生日期無效");
                  }
              }
      
              public string CardNumber { get;private set; }
              public string AddressCode { get; private set; }
              public DateTime BirthDate { get; private set; }
              public Gender Gender { get; private set; }
          }
      }


      (本文版權(quán)屬于? 2012 - 2013 予沁安 | 轉(zhuǎn)載請注明作者和出處

      posted @ 2013-04-18 01:56  予沁安  閱讀(1443)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 亚洲一区二区三区啪啪| 日本高清视频在线www色| 阿拉善左旗| 国产视频一区二区三区四区视频 | 动漫av纯肉无码av在线播放| 日韩有码中文字幕一区二区 | 亚洲国产成人久久77| 国产精品福利自产拍在线观看 | 欧美人与禽2o2o性论交| 99热这里只有精品免费播放| 日本人一区二区在线观看| 高清自拍亚洲精品二区| 亚洲乱码日产精品bd在线看| 亚洲天堂伊人久久a成人| 成人免费A级毛片无码片2022 | 日韩不卡在线观看视频不卡| 久久丫精品久久丫| 欧洲无码一区二区三区在线观看| 日本一区二区三区四区黄色| 99精品免费久久久久久久久日本| 91精品国产自产91精品| 福利一区二区视频在线| 大香伊蕉在人线国产最新2005| 国产精品无码无片在线观看3d| 六十路老熟妇乱子伦视频| 亚洲夜色噜噜av在线观看| 欧美性白人极品hd| 亚洲综合精品一区二区三区| 麻豆国产va免费精品高清在线| 国产精品十八禁在线观看| 狠狠v日韩v欧美v| 日韩在线不卡免费视频一区| 久久月本道色综合久久| 亚洲精品无码久久一线| 日韩在线视频一区二区三| 亚洲精品天堂在线观看 | 伊人激情一区二区三区av| 亚洲免费人成网站在线观看| 91精品久久一区二区三区| 成人白浆一区二区三区在线观看| 亚洲αⅴ无码乱码在线观看性色|