追求代码质量: 用代码度量进行重构
2009-11-19 00:00:00 来源:WEB开发网小就是美
是否真的要测试长方法中的第 18 个条件,是个判断问题。但是,如果逻辑中包含真实的业务值,就会想到测试它,这个时候就可以看到提取方法模式的作用了。要把风险降到最小很简单,只需把条件逻辑分解成更小的片段,然后创建容易测试的新方法。
例如,updateContent() 方法中下面的这小段条件逻辑创建一个状态 String。如清单 1 所示,逻辑的隔离看起来足够简单:
清单 1. 条件逻辑成熟到可以进行提取//...other code above
String retstatus = null;
if ( lastChangedStatus != null && lastChangedStatus.size() > 0 ){
if ( status.getId() == ((IStatus)lastChangedStatus.get(0)).getId() ){
retstatus = "Change in Current status";
}else{
retstatus = "Account Previously Changed in: " +
((IStatus)lastChangedStatus.get(0)).getStatusIdentification();
}
}else{
retstatus = "No Changes Since Creation";
}
//...more code below
通过把这一小段条件逻辑提取到简洁的新方法中(如清单 2 所示),就做到了两件事:一,把 updateContent() 方法的整体复杂性降低了 5;二,逻辑的隔离很完整,可以容易地对它进行测试。
清单 2. 提取方法产生 getStatusprivate String getStatus(IStatus status, List lastChangedStatus) {
String retstatus = null;
if ( lastChangedStatus != null && lastChangedStatus.size() > 0 ){
if ( status.getId() == ((IStatus)lastChangedStatus.get(0)).getId() ){
retstatus = "Change in Current status";
}else{
retstatus = "Account Previously Changed in: " +
((IStatus)lastChangedStatus.get(0)).getStatusIdentification();
}
}else{
retstatus = "No Changes Since Creation";
}
return retstatus;
}
更多精彩
赞助商链接