博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
测试构造器它山之玉可以重构:身份证号(第四天)
阅读量:4676 次
发布时间:2019-06-09

本文共 3966 字,大约阅读时间需要 13 分钟。

文章结束给大家来个程序员笑话:[M]

    可以说,到了明天,我才真正能开始做我想要的重构/改良。之前,只是弥补测试,调整了一下结构。

是的,非常的迟缓,这居然被称为“捷敏”!? 你说奇异不奇异?
还好,种这节拍适合我种这大龄青年,适用就好,关它是风花还是雪月。

    

==》 测试覆盖

    上一次漏掉了最主要的异步,测试覆盖:

    

    本以为会秀一个英俊的100%覆盖率的测试出来,人算不如天算,居然有一个方法是75%!

    

    (本文权版属于© 2012 - 2013 )

    

    恩,无效的日生没有测试。

    很简单,就加增一个测试而已,就不在这罗嗦了。直接贴覆盖率,显摆一下。

    

    再显摆一下代码量质参数:

    

    杂复度 最大的就是构造器了。可护维标指还是不错的 76分。

    

==>优化改良:属性,态静设值和其他

    零零碎碎的改良,你可以如后面一样,基于一个一个测试向纵改,也可以全体改完在一起测试,没有太大关系,前者是格严的测试驱动。但是,我认为不需太学术化,关键是,你的务任够足小,能在明天实现,那就是适合。

    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的证验,因为正则表达式经已包含了。

    每日一道理
爱心是一片照射在冬日的阳光,使贫病交迫的人感到人间的温暖;爱心是一泓出当初沙漠里的泉水,使濒临绝境的人重新看到生活的希望;爱心是一首飘荡在夜空的歌谣,使孤苦无依的人获得心灵的慰藉。
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 | 转载请注明作者和)

文章结束给大家分享下程序员的一些笑话语录: 腾讯总舵主马化腾,有人曾经戏称如果在Z国选举总统,马化腾一定当选,因为只要QQ来一个弹窗”投马总,送Q币”即可。

转载于:https://www.cnblogs.com/jiangu66/archive/2013/05/02/3055417.html

你可能感兴趣的文章
Android——KEYCODE列表
查看>>
cf251.2.C (构造题的技巧)
查看>>
Suse碎碎念
查看>>
C#面向对象基础(三) 属性
查看>>
Odoo字段类型详解
查看>>
时间戳有什么作用,如何定义时间戳??
查看>>
网络编程数据链路层
查看>>
项目延期原因及应对之道
查看>>
python3 判断数据类型
查看>>
Chrome浏览器 调试工具 vue-devtools 的安装和使用
查看>>
门面(Facade)模式
查看>>
html第一堂课
查看>>
IPv6 03-IPv6路由协议
查看>>
跨域请求
查看>>
Web 开发中很实用的10个效果
查看>>
HTML5上传文件显示进度
查看>>
友盟错误日志分析(转自:COCOACHINA shemy )
查看>>
HDU5336-XYZ and Drops-模拟
查看>>
powershell 查看程序的tcp网络连接
查看>>
C++技术问题总结-第12篇 设计模式原则
查看>>