Happy3w

万行代码瘦身计划

2016.12.28
开发环境:eclipse 开发事例:NC系列 开发故事: 几年前第一次看见一个8000多行代码的类,且看增长速度很快将超万行,感觉非常震惊,当时就忍不住提出了很多建议,没过多久这个部门就散了,建议也不了了之。后来,某次参加新人转正答辩评审,会上展示的代码不经意间看到有5千多行,于是问,你了解过代码规范吗?旁边的另一评委笑了,遗留代码没办法。我奇怪,为嘛大家貌似对这些动则几千行的代码习以为常。 直到看了NC很多版本的代码,千行以上的代码常有,5千以上的也不只一两个。5千行是什么概念呢,一般笔记本或者PC一屏能显示100~120行(相当于1页),5千行代码相当于40~50页。一个类承载这么多的内容,怎么读。实际上,大家根本就不读,只是解Bug,解到哪看哪,大家你一句我一句各改各的,代码越加越多。随之,这个类越来越易出问题,大家越来越不懂这个类在干啥,改问题的效率越来越低。 那么,能不能类中的代码越改越少,结构越改越清晰呢? 下面介绍一些简单管用的方法。 说明:这里的解Bug,包括修改代码逻辑错误,原代码中新增特性等一切对原代码的修改。 经验总结: 1、插入超3行,增加一个方法 解Bug时,如果修改某方法时新增代码超出3行,考虑增加一个方法,而不是在现有代码中插入新代码。这样做两点好处: 1)保持原方法的结构,防止原来50行的代码,修改几次后变成了好几百行。 2)新方法可以加详细注释,调用时更明确。 2、插入超100行,增加一个类 如一次新增代码行超出100行,建议增加一个类。然后在原类调用新类,这样完全不影响原类结构。 3、原方法超200行,独立新类,拆成小方法 如要修改的原方法已经超出200行,建议把该方法体抽出来独立一个类(注意保留原方法名,只把方法体抽出来),并把该方法按照简单规则拆成小方法。这个也是不用刻意做,改到哪个拆哪个。 简单的方法拆分规则: 1)如有if、else等分支路径拆分,每个分支一个方法。 2)如有多重循环,可以每层循环一个方法,逐层调用。 3)最粗暴的规则:每50行一个方法(前提保证每个方法参数不超过5个)。 拆分的过程可以借助eclipse提供的refactor->extract method,方便快捷,不易出错。 4、原类超1000行,拆成新类 当解Bug所在的类已经超出1000行,建议要修改的方法体全抽取出来独立成新类和方法,把该方法调用的私有方法统统拷贝到新类中,如果这些私有方法同时被多个方法调用,那么意味着将这些方法独立抽取出来成新类的公共方法。 以上方法,若能坚持,则代码不需要大刀阔斧的重构,也能保持体型,而且会越来越苗条。 总结: 维护代码就像打扫卫生,必须经常清理,才能保持干净整洁。 若每个维护代码,解bug之人都能经常清理代码,整理代码,定能保持代码干净整洁、越改越清晰。