我希望在下面的代码中将大量逻辑提取到一个单独的类中,但我遇到了麻烦,因为它最终调用了一个受保护的方法。
这是我目前的代码:
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
是有原因的,所以我认为我不应该改变它。
我还有哪些选项可以很好地重构?
答案 0 :(得分:0)
您似乎对protected
方法有点误解。
受保护的方法只能由定义它的类或其子类调用。在您的情况下,这意味着如果您要在类save_stuff
中调用方法LogicManager
,则表示LogicManager
必须从ExcelSheet
继承。
考虑到课程的命名,我不确定你是否愿意这样做,因为它对我来说似乎不合逻辑(没有双关语)。