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

How can I extract code into its own class while still calling a protected method?

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

这是我当前的代码:

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 是有原因的,所以我认为我不应该更改它。

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

看来你对protected方法有点误解

受保护的方法只能由定义它的 class 或其子class 调用。在你的例子中,这意味着如果你想在 class LogicManager 中调用方法 save_stuff,这意味着 LogicManager 必须继承自 ExcelSheet

考虑到 classes 的命名,我不确定你是否想这样做,因为我觉得这不合逻辑(没有双关语意)。