如何在仍调用受保护方法的同时将代码提取到自己的类中?

时间:2016-07-14 20:09:56

标签: ruby protected

我希望在下面的代码中将大量逻辑提取到一个单独的类中,但我遇到了麻烦,因为它最终调用了一个受保护的方法。

这是我目前的代码:

class ExcelSheet
  ...
  protected

  def save_stuff
    # do work
  end
end

class CustomSheet < ExcelSheet
  def custom_stuff
    # lots of logic
    save_stuff
    # more logic
  end
end

这是我尝试过的代码:

class LogicManager
  def logic_valid?
    # lots of logic
    save_stuff
  end
end

class CustomSheet < ExcelSheet
  def custom_stuff
    manager = LogicManager.new(some_data)
    if manager.logic_valid?
      # more logic
    end
  end
end

不幸的是,在我的LogicManager中,我无法拨打save_stuff,因为它是protected。我没有写原始方法,我确定它被标记为protected是有原因的,所以我认为我不应该改变它。

我还有哪些选项可以很好地重构?

1 个答案:

答案 0 :(得分:0)

您似乎对protected方法有点误解。

受保护的方法只能由定义它的类或其子类调用。在您的情况下,这意味着如果您要在类save_stuff中调用方法LogicManager,则表示LogicManager必须从ExcelSheet继承。

考虑到课程的命名,我不确定你是否愿意这样做,因为它对我来说似乎不合逻辑(没有双关语)。