迭代数组与对象属性、优化冗余case分支代码的更优实现方案?
Ruby代码重构方案
第一步:修正Myobject类定义问题
原有类的initialize方法未初始化属性为可push的数组,也未暴露属性访问器,会导致运行报错,修正后代码如下:
class Myobject # 暴露属性读写接口 attr_accessor :blue, :red, :yellow def initialize # 初始化所有属性为空数组,支持后续push操作 @blue = [] @red = [] @yellow = [] end end
第二步:重构mymethod消除重复逻辑
通过参数-属性映射表替代冗余的case分支,重构后代码如下:
def mymethod(myobject) # 集中管理参数值到实例属性的映射关系 param_to_attr = { 'foo' => :blue, 'bar' => :red, 'jaa' => :yellow } param_list = ['foo','bar','jaa'] param_list.each do |param| # 可选:添加合法参数校验,避免非法参数触发异常 next unless param_to_attr.key?(param) data = collect_method myobject.send(param_to_attr[param]).push(data) end end
重构优势
- 完全消除重复的分支代码,后续新增参数仅需在
param_to_attr中添加一行键值对,无需修改核心逻辑 - 映射关系集中管理,代码可读性和可维护性大幅提升
- 可灵活扩展参数校验、数据预处理等通用逻辑,无需修改每个分支
内容的提问来源于stack exchange,提问作者AnnABlue
相关产品推荐
相关产品推荐

