代碼整潔之道------它山之玉能夠重構:身份證號碼解析、驗證工具(第一天)

首先感謝原做者的代碼: 《 面向對象的15位、18位中國大陸身份證號碼解析、驗證工具》. 若是有版權問題,敬請告知。

原代碼給了我很好的起點,是的,這些代碼都是玉,我在這只是再琢磨琢磨。
即便如此,重構的過程依然很繁瑣,文章也許會很長,每一次的重構都須要把所有代碼顯示一遍。

知易行難, 重構是個動態過程, 不那麼容易呈現出來,須要點耐心,慢慢看啊。
(本文版權屬於© 2012 - 2013 予沁安

1 - 轉化爲C#代碼,增長第一個測試

是的,這不是必須的,能夠說是我本身的緣由,不會Java。可是,你也能夠看做是一種重構的場景,不是嗎? java

更改的代碼就再也不放了,比較簡單,與C#和Java的區別有關,留個鏈接 SocialID.cs。但是,個人測試代碼卻很重要。可能不少人會詬病個人測試框架(Machine.Specification)和代碼風格。前者,我想之後會多介紹MSpec和BDD讓你們根熟悉,後者,只能是但願你們適應了。 git

==>寫測試

第一個測試代碼:當用正確的輸入建立身份證時,應該可以獲得正確的生日。

namespace Skight.eLiteWeb.Domain.Specs
{
    public class  when_create_social_id_with_proper_input
    {
        private Because of = () => subject = new SocialID("43010319801120753");

        private It should_get_birth_date_correctly =
            () => subject.getBirthDate().ShouldEqual(new DateTime(1980, 11, 20));
        private static SocialID subject;
    }
}

==>運行第一個測試,失敗 :)

有意思的是,解決C#語法翻譯以後,個人第一個測試就失敗了。

==>重構

原來,看似相同的語法Substring,第二個參數卻有不一樣的含義。再經典不過的場景了,測試能夠理順這個過程。 程序員

private String getBirthDayPart() {
		return this.cardNumber.substring(6, 14);
	}
改成
private String getBirthDayPart()
{
return this.cardNumber.Substring(6, 8);
	}

==>再測試

==>第一個迭代結束,休息.

好了,階段性的成果,一個測試/行爲就能夠標示爲一個里程碑,今天就到這裏了,你的支持,讓我明天繼續。 github

哦,少等. 最後一步,確實最重要的一步. 給咱們客戶(這中狀況下,個人客戶是其餘開發人員,是的,高級程序員的客戶就是其餘中級,初級程序員,換一下思想吧)的測試/功能報告,以下: c#

(本文版權屬於© 2012 - 2013 予沁安 | 轉載請註明做者和出處框架

相關文章
相關標籤/搜索