加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 重构一个简单填充的long方法

发布时间:2020-12-15 05:16:26 所属栏目:Java 来源:网络整理
导读:我正在重构一个超过500行的方法(不要问我为什么) 该方法基本上从数据库中查询地图列表,并且对于列表中的每个地图进行一些计算并将该计算的值添加到地图中.然而,有太多的计算和完成,代码已经达到500多行! 这是一个示例预览: public ListHashmap getProductD
我正在重构一个超过500行的方法(不要问我为什么)

该方法基本上从数据库中查询地图列表,并且对于列表中的每个地图进行一些计算并将该计算的值添加到地图中.然而,有太多的计算和完成,代码已经达到500多行!

这是一个示例预览:

public List<Hashmap> getProductData(...) {
   List<Hashmap> products = productsDao.getProductData(...);
   for (Product product: products) {
       product.put("Volume",new BigDecimanl(product.get("Height")*
              product.get("Width")*product.get("Length"));
   //over 10 more lines like the one above
      if (some condition here) {
         //20 lines worth of product.put(..,..) 
      } else {
         //20 lines worth of product.put(..,..)
      }
      //3 more if-else statements like the one above
      try {
         product.put(..,..)
      } catch (Exception e) {
         product.put("",..)
      }
      //over 8 more try-catches of the form above
   }

关于如何重构这个的任何想法?

解决方法

我想到一个简单的想法来划分一个方法是“找出有意义的小任务”,所以这里有一些提示:

为项目级别创建方法

processCollection(collection) {
// startup code
for (Item i: collection)
  processCollectionItem(i,...other args...);
// final code
}

尝试使用自己的方法剪切每个注释块

// does a
instr 1
instr 2
instr 3
instr 4
// does b
instr 5
instr 6
instr 7
instr 8

转换为

a(...);
b(...);

试着看看是否有一些线是一些一般模式的具体表达

map.put(a[0],b[0]);
map.put(a[1],b[1]);
...

转换为

putKeysAndValues(a,b);

putKeysAndValues(a,b) {
  for (int i=0; i<a.length; i++)
     map.put(a[i],b[i]);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读