代码整洁之道------它山之玉可以重构:身份证号码解析、验证工具(第一天)
首先感谢原作者的代码: 《 面向对象的15位、18位中国大陆身份证号码解析、验证工具》. 如果有版权问题,敬请告知。
原代码给了我很好的起点,是的,这些代码都是玉,我在这只是再琢磨琢磨。
即使如此,重构的过程依然很繁琐,文章也许会很长,每一次的重构都需要把全部代码显示一遍。
知易行难, 重构是个动态过程, 不那么容易呈现出来,需要点耐心,慢慢看啊。
1 - 转化为C#代码,增加第一个测试
是的,这不是必须的,可以说是我自己的原因,不会Java。但是,你也可以看作是一种重构的场景,不是吗?
更改的代码就不再放了,比较简单,与C#和Java的区别有关,留个连接 SocialID.cs。可是,我的测试代码却很重要。可能很多人会诟病我的测试框架(Machine.Specification)和代码风格。前者,我想以后会多介绍MSpec和BDD让大家根熟悉,后者,只能是希望大家适应了。
==>写测试
第一个测试代码:当用正确的输入创建身份证时,应该能够得到正确的生日。
1 2 3 4 5 6 7 8 9 10 11 | 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,第二个参数却有不同的含义。再经典不过的场景了,测试可以理顺这个过程。
1 2 3 | private String getBirthDayPart() { return this .cardNumber.substring( 6 , 14 ); } |
改为
1 2 3 4 | private String getBirthDayPart() { return this .cardNumber.Substring(6, 8); } |
==>再测试
==>第一个迭代结束,休息.
好了,阶段性的成果,一个测试/行为就可以标示为一个里程碑,今天就到这里了,你的支持,让我明天继续。
哦,少等. 最后一步,确实最重要的一步. 给我们客户(这中情况下,我的客户是其他开发人员,是的,高级程序员的客户就是其他中级,初级程序员,换一下思想吧)的测试/功能报告,如下:
皓月碧空,漫野如洗,行往卓越的路上
标签:
开发改进
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库