小的函数
函数应该尽可能的短小。
低于20行,3到4行最好。
代码块与缩进
代码块最好只有一行,那一行代码可能是方法调用。
方法有一个描述性的名称。
缩进层级尽可能第小。
只做一件事
一个方法应该只做一件事。
每个方法只有一个抽象层次
代码阅读从上到下
switch语句
switch语句往往做了多件事,违反了单一职责原则与开闭原则。
public Money calculatePay(Employee e)
throws InvalidEmployeeType {
switch (e.type) {
case COMMISSIONED:
return calculateCommissionedPay(e);
case HOURLY:
return calculateHourlyPay(e);
case SALARIED:
return calculateSalariedPay(e);
default:
throw new InvalidEmployeeType(e.type);
}
}
使用抽象工厂方法,创建不同的子类。隐藏创建方式。
通过多态来实现不同的逻辑。
public abstract class Employee {
public abstract boolean isPayday();
public abstract Money calculatePay();
public abstract void deliverPay(Money pay);
}
public interface EmployeeFactory {
public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType;
}
public class EmployeeFactoryImpl implements EmployeeFactory {
public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType {
switch (r.type) {
case COMMISSIONED:
return new CommissionedEmployee(r) ;
case HOURLY:
return new HourlyEmployee(r);
case SALARIED:
return new SalariedEmploye(r);
default:
throw new InvalidEmployeeType(r.type);
}
}
}
使用描述性的名称
函数越短越容易找到一个描述性名称。
一个长的描述性名称比一个短的谜一般的名称好。
一个长的描述性名称比一个长的注释好。
保持命名一致性。
函数参数