编码感悟

Posted by Codeboy on December 1, 2015

这几天一直想写一下自己在编码上的一些感受与感悟,趁着这个晚上,大体的写一下,有问题还望大家多多指教。

从本科开始接触编码,到现在已经有接近七年的时间。从最开始的伪代码,C语言,Java,到后面的JavaEE开发,Android开发,Ios开发,经历了很多。曾几何时自己一直是一种任务导向的写代码,虽然接触的很多,但是很多都是比较重复的事情,在重复的事情下面,并不去总结,去抽象,而是一遍遍的复制代码,然后做部分修改。研究生阶段,接触了很多,也慢慢尝试着去做编码总结。但是人总是把什么事情都想的特别美好,过后就抛到脑后。在天猫的实习的5个月,自己对编码有了进一步的感悟,也进一步的约束现在的自己,约束自己的编码。

1. 代码重复

这个可能是我们都熟悉不能再熟悉的问题,大家都知道代码重复会对后面的维护造成很大的问题,出现最多的问题可能是修改的时候遗漏了某部分。可是依旧有多少码农仍然在复制粘贴呢? 前几个月从 Eclipse 迁移到 Intellij idea ,不得不说后者比 Eclipse 确实强大不少,基本的功能就不说了,Intellij idea 可以对项目的重复代码进行警告,对未知的异常(例如NPE)进行警告等,我们需要做的是把这些警告全部消灭,慢慢培养良好的代码习惯。

2. 代码健壮性

不论在正常的情况下还是一些异常的情况下,你的代码都能够很好的进行运行,不会crash,不会抛出 NullPointException 等,那你的代码基本已经合格了。很多时候不要认为一个对象肯定不为空,特别是外部传来的对象,不是自己的部分一定要做检查等一些防范。

这里还要强调的一点是,尽可能不要去使用static去存储一些非常量的对象,除非你已经很好的对这些静态的变量进行了管理。

3. 重复造轮子

这个问题也是经常提到的问题了,如果别人已经写出很好的代码了,并且开源了,很多人再用,那么自己真的没必要去再去实现一套这样的代码,例如 Hibernate,操作数据库方面已经很好了,如果不是对数据库方面有强烈的特殊要求,Hibernate 绝对是够用了,而且很多时候我们必须承认使用了一些框架后开发效率提升了很多,同时也减少了一些错误的发生。

4. 视角转变

在天猫最深有体会的应该算是视角转换了,项目很大,自己负责的是一小块。首先需要对整体的大模块乃至项目有一定的熟悉与掌握,之后需要考虑怎么把自己的小模块加入项目中。站在整个工程的角度上,自己需要把小模块的一些接口等方便设计好,方便外部调用; 同时站在小模块的角度上,我需要尽可能的较少对项目的引用(迪米特法则),也即减少对自己小模块外的对象的引用,尽可能做成独立的模块,类似与热插拔模式,添加与删除都很容易。

5. 代码抽象

代码越写越多,我们在已经在第一条(代码重复)中知晓了项目中尽可能不出现相同功能的代码,那么问题来了,做完A项目后要做B项目,性质一样,很多代码依旧是复制粘贴,怎么办呢?此时我们需要将自己经常使用的代码进行抽象,项目管理中大家应该经常用到 mavengradle 的工具,我们也可以将自己的很多代码抽象,封装,将一些经常使用的操作进行抽象封装,之后同步到仓库(内部仓库一样)。这样之后,需要的时候直接引入即可。不用每次去重复的写网络请求,文件读取等。

自己将经常使用的操作进行了封装,放置在https://github.com/androiddevelop/CommonBase上,很多操作都简化为了一行操作,包括网络请求中session的维持等。很多东西也都在编码中一点点的新增。

6. 设计模式

第一次接触设计模式的时候真的只是为知道有这个东西,看后很快基本全不记得了,代码该怎么写依旧怎么写,第二次看的时候有一点点的感悟。可能设计模式真的需要在写代码的途中,慢慢的发现,慢慢的领悟。很多设计模式我们经常的用到,只是不知道而已,比如文件流里面经常使用装饰(decorator)模式,比如在循环遍历的时候经常使用迭代器(iterator)模式,还有很多很多的例子,jdk的源码中也有很多的体现。设计模式在小项目中可能体现的不是那么明显,但是在大项目的开发与维护中有着非常重要的意义。

思维图

做项目前一定要将思路梳理清除,推荐使用 Xmind http://www.xmindchina.net/绘制出思维图,对项目进行全面的分解,便于问题的暴露,也能很好对项目中的部分进行抽象。

如有任何知识产权、版权问题或理论错误,还请指正。

转载请注明原作者及以上信息。