昨天XX面试时,一道这样的问题难住了我,就是:在这么多年的编码中,说说自己的最佳实践。当时懵掉了,虽然看过很多敏捷开发、代码清洁之道、代码大全这些关于最佳实践的书,但却一条也说不出来。趁现在有时间,想想这个问题,总结一下自己的代码最佳实践。
- 一致的代码格式。
- 形成自己的工具类
开发时,为了减少代码量,多使用第三方的类库,如 Apache Commons 等,里面提供了简化操作的类。形成自己的工具类目标是简化代码开发,对一些通用功能进行封装。
- 业务逻辑与技术实现相分离
如果一个函数或者一个类主要用来描述业务逻辑实现,那么最好不要在该方法有过多的技术细节实现。例如注册读者的功能,检查有效性、插入到数据库、发送邮件等这些算是业务逻辑。而针对每一个业务逻辑的技术实现细节最好和业务逻辑实现分开。这样使代码更加清晰。
- 保持类和函数的短小,尽量提取可复用组件或者函数
类短小,可以控制类的单一功能和类的简单性。越简单越有助于重用。编写代码时,对每个代码段考虑这个代码段会重复出现吗?重复出现时,哪些参数需要变化?该怎么抽象这段代码呢?
- 用设计模式去思考要解决的问题。而不是用流程去思考问题。
- 优先使用组合,而非继承。继承意味着会给新建类带来新的方法,这些方法真的适用于这个新建的类吗?
- 编写类时,应考虑这个类会不会在多线程下使用,如果在多线程环境下会不会有问题,如果有问题,该怎么解决。
- 慎用 StringBuffer/Vector/HashTable ,这些类尽管在多线程下没有问题,但在单线程环境下可能效率不高。在单线程环境下,使用 StringBuilder/ArrayList/HashMap. 如果是多线程环境,考虑使用 JCF 中的同步类。
- 变量名、函数名、类名表意。写出来的代码要达到不用注释就能看懂。
- 命名时,避免使用类似 ReaderInfo , ReaderClass 这样的类名。 Info 和 Class 是语义的重复,无需在命名时使用。
- 边开发边重构。写代码时,如果发现有些不妥的地方,要及时重构和修改、测试。有时会想,先做完再重构,忘掉这种想法。这种想法不可取。越往后拖,越不易重构,越懒得重构。
- 应考虑写出的代码可能面临的性能问题。使用这个类合适吗?有更简单更有效的代码改进吗?循环的结构修改一下会不会会提高效率,要不要定义临时变量或者状态字段存储处理结果以减少多次运算?……
- 常见的类名前缀或者后缀: Simple*** 、 Default***, ***ServiceProvider , ***Utils, ***Templage, ***Template
, ***Model , ***Factory, ****Adapter . 接口在声明是多使用 ***able ,表示实现类具有该能力,如 Runable ,Configurable,Customizable , Imutable 等等。而实现类的声明多使用 ***Runner,****Configuration 等名词结构。