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

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

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

知易行難, 重構是個動態過程, 不那麼容易呈現出來,需要點耐心,慢慢看啊。

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

是的,這不是必須的,可以說是我自己的原因,不會Java。但是,你也可以看作是一種重構的場景,不是嗎?

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

==>寫測試

第一個測試代碼:當用正確的輸入創建身份證時,應該能夠得到正確的生日。

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);
	}

==>再測試


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

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

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章