编程原则

提高可读性。

小块的代码,越小越好。

消除重复代码。

尽量进行抽象

一目了然的命名,不要怕名字长,包括类、变量、方法。

尽可能提高代码的表达力,而不是去使用注释。

删除无用代码,版本管理工具会帮你保留历史,不用担心找不到。

大胆写方法吧,先不要想着怎么优化,先专注于业务与功能,再进行优化。

方法短小,利于阅读。

一个方法只做一件事,业务多的能拆则拆。

方法参数能少则少,提高可读性。

条件句后面跟的代码段往往可以独立出来放到一个方法中。

if 跟肯定式更容易理解。

数字常量、字符串常量不要直接出现在代码中,应当先做声明,在代码中使用此常量的引用。

变量在靠近使用它的地方定义,私有方法在调用它的公有方法下面定义。

重载构造器时,考虑 用静态工厂方法替代构造器


方法传参不要使用 null,将这个要求作为默认规则,对于特殊原因不能做到的情况应当使用 @Nullable 注解标明。

方法返回值亦如此,同上。(PS:当返回值为空时,可以选择抛出异常)

使用空对象,代替参数中为 null 的对象引用,《空对象模式》。

用简洁的方式做空值判断,比如 Java8 的 Optional、Guava 的 Preconditions 等。

严谨定义数据库表的空值约束,一定不为空的字段对应的实例属性无需进行空值判断。

函数最短原则(不多于30行)。

(2)变量单一职能原则(一个变量只允许承担一个责任,针对每次赋值,创建一个独立。对应的临时变量。循环变量和收集结果变量除外)。

(3)函数单一职能原则(一个函数只做一件事情)。

(4)for循环单一职能原则(一个for循环只做一件事情,也许你会考虑效率问题,但不经过测试是没有发言权的)。

(5)三次原则(事不过三,三则重构)

代码的坏味道:

1. 重复代码(Duplicated Code)

(1)同一个类的两个函数含有相同的表达式,采用Extract Method(提炼函数)方法提炼重复的代码。

(2)两个互为兄弟的子类内含有相同表达式,采用Extract Method提取函数,使用Pull UP Method 放到超类内。如果代码之间只是类似,并非完全相同,那就用Extract Method将相似部分和差异部分割开,构成独立的一个函数。可运用Form Template Method 获取一个模板模式。

(3)如果两个毫不相关的类出现重复代码,应考虑Extract Class 将重复代码提炼到一个独立类中。

2. 函数过长(Long Method)

常用方法:

1.提炼函数(Extract Method):将某段代码放进一个独立函数中,并让函数名称解释该函数的用途。

2.内联函数(Inline Method):在函数调用点插入函数本体,然后移除该函数。

3.内联临时变量(Inline Temp):将所有对该变量的引用动作,替换为对它赋值的那个表达式自身。(某个临时变量被赋予某个函数调用的返回值)

4.以查询取代临时变量(Replace Temp with Query):一个临时变量保持某个表达式的运算结果,将这个表达式提炼成一个独立函数中,将这个临时变量的所有引用点替换为对新函数的调用。此后,新函数可以被其他函数使用。

5.引入解释性变量(introduce Explaining Variable):一个复杂的表达式可以将这个表达式(或者其中的一部分)的结果放进一个临时变量。以此变量名称来解释表达式用途。

6.分解临时变量(split temporary variable):某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集结果,针对每次赋值,创造一个独立,对应的临时变量。体现变量的单一职能原则。

7.移除对参数的赋值(Remove Assignment to Parameters):代码对一个参数进行赋值,应以一个临时变量取代该参数的位置。java采用的是值传递,函数体内对参数的改变都不会影响原来的值。

原文地址:https://www.cnblogs.com/huiandong/p/10045840.html