コンストラクタをテスト山の玉は再構築できます:身分証明書番号(4日目)Strut 2チュートリアル-javaチュートリアル


文章の終わりにプログラマーのジョークをみんなにあげます:[M]
明日になって、私は本当に私の望む再構築/改良を始めることができます.前に、テストを補うだけで、構造を調整しました.はい、とても遅いですが、これは意外にも「捷敏」と呼ばれています!?おかしいと言ったのか?幸いなことに、このリズムを植えるのは私がこの年頃の青年に適していて、適用すればいいので、風花なのか雪月なのかは関係ありません.
    

==テストオーバーライド


前回は最も主要な非同期が漏れて、オーバーライドをテストしました.
    
ハンサムな100%カバー率のテストができると思っていたが、人は天算に及ばず、75%の方法があった.
    
(本著作権版は© 2012 - 2013 予沁安 )
    
はい、無効な日生はテストしていません.
簡単です.テストを追加しただけで、ここでくどくどしません.直接カバー率を貼って、見せてください.
    
コード量質パラメータをもう一度表示します.
    
複素度が一番大きいのはコンストラクタです.可護維標指はやはりいい76点です.
    

==>最適化の改良:属性、静設値、その他


こまごました改良は、後のように、1つのテストに基づいて縦に変更することもできますし、全体的にテストを完了することもできます.あまり関係ありません.前者は厳しいテスト駆動です.しかし、あまり学術化する必要はないと思います.肝心なのは、あなたの任務が十分に小さく、明日実現できることです.それは適切です.
    1. ある情報ブロックを属性式方に変更する.一つはJavaとC#の別区であるからだ.第二に、元のコードのバッファ日生の論理を極致にし、最初からバッファ(コンストラクタの中)
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.データ分析はコンストラクタに解放され,コンストラクタで呼び出されるだけの独自の方法を確立する.
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(" ");
            }
        }

    3.以前のコード解析パラメータから,コンストラクタの複素度が高すぎて,主にいくつかの検証が見られた.正規表現が含まれているため、null、emptyを削除する2つの検証方法を改良します.
毎日同じ理屈
まさに「学海無涯」である.私たちは茫漠とした知識の海の中で魚の群れが跳躍し、戯れ、知識の海の中で生まれ、成長し、生活しているようだ.私たちはこの生活を維持する「海水」から離れられない.もしこの「海」から飛び出して、「陸地」に行って生活すれば、私たちは非情な「太陽」に照らされて死ぬだろう.
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、最初は立ち上がって、コーヒーを一杯ください。私たちの成果を楽しんでください。


保護性は82に向上し,複素度はvalidate()3が最も高く,
    
完全なコードは、はっきりしていますか?
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; }
    }
}

(本著作権版は© 2012-2013 予沁安|転載作者と出典を明記してください)
ある日、一人の男が森を通り抜けたとき、小さな声で彼を呼んだ.彼は頭を下げて見るとカエルだった.「キスしてくれれば、きれいなお姫様になるよ」男は何も言わずにカエルを拾い、ポケットに入れた.「キスしてくれれば、私は美しいお姫様になりますよ.そして、出会ったすべての人に、あなたがどんなに賢くて勇敢なのか、あなたは私の英雄だと教えてくれます.」男はカエルを出して、それに向かってかすかに笑って、またポケットに戻しました.「キスしてくれれば、私は美しいお姫様になります.それから、私はあなたの妻になりたいです.一週間」男の人はまたカエルを出して、それに向かってかすかに笑って、それをポケットに戻しました.「キスしてくれれば、私は美しいお姫様になります.それから、私はあなたの妻になりたいです.そして、あなたは私に何でもすることができます.」もう一度、男はカエルを出して、それに向かってかすかに笑って、またポケットに戻しました.最後に、カエルは無力に「私はこんなに良い条件を出したのに、どうして私にキスしてくれないの?」と聞いた.男の人は言います:“私は1人のプログラマーで、私はどんな王女とごろつきをする时間がありません.しかし、1つの话すことができるカエルを持っていて、とてもクールです.”