重构 如何优化,多条件判断?!

mimosa · 2012年05月17日 · 最后由 cantin 回复于 2012年06月08日 · 4299 次阅读

感觉很累赘~~

目的:

1、通过分析订单,统计出每款产品,每天的销量; 2、订单来源于:正常订单和品牌特买两个渠道; 3、区分显示各渠道的数值,”特买“为橙色字体; 4、如果同时存在,则显示综合,通过 tooltip 提示构成;

数据:

{
  12372336825 => { 
    :name => 'WR574AGD', 
    :sale => {:num => 1, :payment => 383.3} 
  },
  12661562424 => { 
    :name => 'AWHF0330', 
    :total => {:num => 1, :payment => 80.0} 
  },
  12818935599 => { 
    :name => 'AWAT1114', 
    :sale => {:num => 2, :payment => 160.0}, 
    :total => {:num => 1, :payment => 80.0} 
  },
}

代码:

def parse_sales(data, field = :num, round = 0)
    if data.has_key?(:sale) # 品牌特买
     sale = data[:sale][field].round(round)
     sale_tag = content_tag(:font, sale, style: 'color: #F89406;')
    end 
    # 普通订单
    total = data[:total][field].round(round) if data.has_key?(:total)
    case
     when (sale && total)
      content_tag(:a, (sale + total), rel: 'tooltip', title: "#{total} + 特买(#{sale})")
     when sale
      sale_tag
     else
      total
    end
  end

输出成:

童鞋,如果说觉得代码不好,需要重构的话,那可不可以贴出你的业务逻辑出来,而不单单是代码。 毕竟连作者都觉得代码有点累赘,我们要看的懂更要费力气啦。

#1 楼 @cantin Sorry,写到一半开会去了。

感觉已经写的很好了。在一个方法里面就处理好了逻辑,返回对应的页面元素,页面里面只需要显示就好了。而且重复代码也很少,最多还需要考虑一下边界情况,比如是否每种情况都会返回正确的值。如果这样的代码还要追求代码简化,是否有点文艺了。

def parse_sales(data, field = :num, round = 0)
    total = data[:total][field].round(round) if data.has_key?(:total)

    sale = special_sale_tag(data, field, round) if data.has_key?(:sale)

    return content_tag(:a, (sale + total), rel: 'tooltip', title: "#{total} + 特买(#{sale})") if total and sale

    return sale if sale

    total
end

def special_sale_tag(data, field = :num, round = 0)
  sale = data[:sale][field].round(round)
  sale_tag = content_tag(:font, sale, style: 'color: #F89406;')
end

#2 楼 @mimosa 这样你觉得如何?有什么不妥的地方吗?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号