又隔了一天写博客,哎,事与愿违!今天我们来谈谈重构这个话题,我们首先要认清一个事实是任何傻瓜都可以写出可运行的代码,唯有写出让人类容易理解的代码才是优秀的程序员,会写java代码的人多的很,随便一个从培训机构出来的初中生都可以,工作5年的你难不成跟他们一样仅限于会功能实现吗?
本次重构很多观点来自于《重构-改善既有代码》与《代码整洁之道》这两本书,大伙可以买来看看,很多观点我们都知道,只是没有形成一个统一的总结。首先我先说下我们重构的一个简单理念要小步前进、快速迭代,怎么快速迭代呢?就是要有尽量完善的单元测试来覆盖你的修改,没有这个我们就不要去想着重构了,太TM危险了。
这次重构主要讲的点:
1.不要有长函数,如果你的一个函数一屏幕都展示不完或者如果你需要用注释来解释你写的代码的业务时,那就说明你该拆分你的代码了,原因很简单,复用性不够,可读性太差,不利于维护,当然还有一点就是函数调用千万不允许太深了,原因就是你跟谁捉迷藏呢?打算玩后面接你代码的人吗?
2.尽可能去除临时变量,原因就是临时变量传来传去,代码可读性很受影响,我们可以使用函数方法替换他。
3.每个方法尽量单一职责,这样代码的复用性才会高。
4.不要让一个临时变量被赋值超过一次,如果这样,说明这个变量承担一个以上的职责,第二个变量该怎么命名怎么命名,不要嫌麻烦。或者用查询替换了这个变量。
5.所有变量名方法名类型命名一定要有讲究,最好是一看名字就知道这个东西是干什么的了,起到注释的作用,还有就是实体类一定要是名词、方法使用动词。
6.不要使用switch或三个以上的if/else,这个是很惊悚的,如果是这样的话我们可以考虑状态模式,或者如果很多就考虑使用数据库之类的技术吧,不要懒!
7.当类作为参数时候不允许重新赋值,因为java的方法传递方式是值传递,原理是拷贝了一份地址给参数了,你重新赋一个新的对象是给这个对象是有问题的。
8.要尽量保证系统不存在相同逻辑块,有这么一句话,第一次做尽管做,第二次不想做也做,第三次我们就得重构了。
9.参数不要超过三个,这样会导致测试覆盖率成倍增加,而且很容易传递错。
11.还有将丑陋的try/catch尽量单独一个方法处理,try/catch本来就不是业务需要关心的东西,我们应该尽量让他跟逻辑分离。
。。。。。。
还有很多,想到再加,重构很重要,虽然不是什么银弹,但是他是让你的代码保持可拓展性的根本。还有,这只是一个开始,这是一门很深的学问,还有一个重要的原则是我们做这件事的时候不能为了重构而重构,我们应该是当有新需求的时候,嗅到了这块逻辑有变质的风险的时候才去重构,深度测试,重构跟需求本来就是螺旋前进的过程,还有人说的我的代码运行好好的,为什么要重构呢?这个问题又回到了之前的问题了,写的代码是给人看的,不是说正常逻辑走通了就行了,其中隐藏了无数bug你清楚吗?说不定你经过重构与测试,这无数个bug就消失了,一下说这么多是不是有点接受不了,没关系,仔细琢磨琢磨。
网友评论