函数
1.函数应该短小
在一个函数下应该是该函数名下的同一级抽象概念层。如果遵循了这个原则那么函数就是短小的。
代码块里的内容应该只是一个方法调用。
2.函数应该只做一件事,只做好一件事情.
public String renderPage(Page page){
if(isTestPage(page)){
includeSetupAndTestPage(page);
}
return page.getHtml();
}
函数描述:要渲染界面,先检测page是否为测试界面,如果是就要包含和建立测试界面,无论是否为测试界面都要渲染成html.
3.每一个函数一个抽象级
4 switch天生就是做多件事情的,那可以吧switch的代码隐藏在低的抽象级函数中,或者也可以用多态来实现。
5.为函数取一个描述性的名称 includeSetupAndTeardownPages,includeSuiteSetupPage,
includeSetupPage等函数名。命名方式一致
6.函数参数
6.1函数参数的个数越少越好,最理想的函数参数时所需要的输入组合就越多。
6.2 一元参数
一元函数就一输入参数,这里主要有两种情形的一种就是有返回值的;另外一种没有返回值,这种情形一般用于事件event.我们要做的就是在命名时区分这两种情形。
public OutputStream fileOpen(String flie);第一种情形
public void passwardAttempFailedNTimes(int attemps);第二种情形
6.3 二元参数
void writeField(String name,OutStream outStream);二元参数函数比一元参数函数难明白.
可以减少参数的办法,
1、其中的某个参数可以在构造时传入.
2.在其中一个参数的类型里面添加一个一元参数方法,这个方法的参数为另外一个参数。
6.4 三元参数
如果没有非常充分的理由的话就不要用三元以及三元以上的参数
6.5 参数对象
6.6 参数列表
可变参数,可变部分的参数类型要一致。
6.7 给函数命名时要用到动词和关键词,由动词和关键词来描述参数的作用以及顺序。
assertExpectEqualsActual(Object expected,Object actual);
7 副作用
函数只做一件事情,如果做了其他的事情一定要在函数名里面说明。
尽量不要用输出参数,可以用this替换。
8 把执行和查询分割开
坏的例子:
void set(String attributeName,String value);
好的例子:
if(hasAttribute(name)){
setAttribute(name,value);
}
这里就把查询属性是否存在和设置属性分割开了。
9.使用异常处理错误代码.
public void deletePerson(Person person){
try{
persons.delete(person);
}catch(Exception e){
log.err(e);
}
}
对于函数deletePerson而言,它只处理要错误异常,所以在try,catch,finally后面都没有任何的代码.
9.1 依赖磁铁
public enum Error
{
OK,
INVALID
}
其它的异常都要依赖Error
10 消除重复
11 实践,用单元测试