如何在仍然调用受保护方法的同时将代码提取到它自己的 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 的命名,我不确定你是否想这样做,因为我觉得这不合逻辑(没有双关语意)。
我希望在下面的代码中将大量逻辑提取到一个单独的 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 的命名,我不确定你是否想这样做,因为我觉得这不合逻辑(没有双关语意)。