专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »项目管理 » 敏捷开发:敏捷开发中需掌握移除重复代码的窍门技巧 »正文

敏捷开发:敏捷开发中需掌握移除重复代码的窍门技巧

来源: 发布时间:星期五, 2009年1月9日 浏览:37次 评论:0
  重复代码是如何产生

  请观察下面代码我们已经有个根据出租记录id取出租用客户姓名思路方法:getCustomerName

public BookRental { //该类描述出租记录
String id;
String customerName;
...
}
public BookRentals {
private Vector rentals;
public String getCustomerName(String rentalId) { 根据出租id取出客户姓名
for ( i = 0; i < rentals.size; i) {
BookRental rental = (BookRental) rentals.elementAt(i);
(rental.getId.equals(rentalId)) {
rental.getCustomerName;
}
}
throw RentalNotFoundException;
}
}
public RentalNotFoundException extends Exception {
...
}
  假定现在你要增加个新思路方法该思路方法是根据出租记录id删除该记录你把这思路方法命名为deleteRental(String rentalId)现在你已经考虑到就像getCustomerName这个思路方法也要个遍历出租记录所以你就将getCustomerName这个思路方法里面些代码拷出来然后稍微修改下:

public BookRentals {
private Vector rentals;
public String getCustomerName(String rentalId) {
for ( i = 0; i < rentals.size; i) {
BookRental rental = (BookRental) rentals.elementAt(i);
(rental.getId.equals(rentalId)) {
rental.getCustomerName;
}
}
throw RentalNotFoundException;
}
public void deleteRental(String rentalId) {
for ( i = 0; i < rentals.size; i) {
BookRental rental = (BookRental) rentals.elementAt(i);
(rental.getId.equals(rentalId)) {
rentals.remove(i);
;
}
}
throw RentalNotFoundException;
}
}
  现在这样代码看起来如何样?不如何样两个思路方法有大多同样代码了

  移除重复代码吧!

  要移除所有重复代码你可以将BookRentals这个类修成如下样子(也就是“重构”了):

public BookRentals {
private Vector rentals;
public String getCustomerName(String rentalId) {
rentalIdx = getRentalIdxById(rentalId);
((BookRental) rentals.elementAt(rentalIdx)).getCustomerName;
}
public void deleteRental(String rentalId) {
rentals.remove(getRentalIdxById(rentalId));
}
private getRentalIdxById(String rentalId) { //新增加个思路方法
for ( i = 0; i < rentals.size; i) {
BookRental rental = (BookRental) rentals.elementAt(i);
(rental.getId.equals(rentalId)) {
i;
}
}
throw RentalNotFoundException;
}
}
  为什么我们要移除重复代码?

  我来向各位员同学稍微说在BookRentals这个类中rentals这个属性类型是Ventor如果我们需要将它改为那我们就必须将所有“rentals.size”改为“rentals.length”在重构以后版本中我们只需要在getRentalIdxById这个思路方法中修改而在原来版本我们就得在getCustomerName跟deleteRental两个思路方法中都改类似我们还要将所有“rentals.elementAt(i)”改为“rentals[i]”又是改次跟改两次比较!

  大多数情况中如果类似这样代码在10个地方重复当我们修改代码时候就要修改10个地方我们并不能保证能把这10个地方都记住了旦漏掉了几个地方等待我们去修复而最致命是,当我们修改是业务逻辑时这时候不管我们漏掉了几个地方IDE都不会报错那么等待我们将是堆Bug去检查而造成些bug中很可能是短时间内还发现不了. 惨-_-!!

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: