WEB开发网
开发学院软件开发Java 追求代码质量: 用代码度量进行重构 阅读

追求代码质量: 用代码度量进行重构

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 小就是美是否真的要测试长方法中的第 18 个条件,是个判断问题,追求代码质量: 用代码度量进行重构(4),但是,如果逻辑中包含真实的业务值,把 updateContent() 方法的整体复杂性降低了 5;二,逻辑的隔离很完整,就会想到测试它,这个时候就可以看到提取方法模式的作用了

小就是美

是否真的要测试长方法中的第 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. 提取方法产生 getStatus
private 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; 
} 

上一页  1 2 3 4 5  下一页

Tags:追求 代码 质量

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接