Ich hatte gehofft, eine Menge Logik in eine separate Klasse im folgenden Code zu extrahieren, aber ich habe Probleme damit, da es am Ende eine geschützte Methode aufruft.Wie kann ich Code in seine eigene Klasse extrahieren und dennoch eine geschützte Methode aufrufen?
Dies ist mein aktueller Code:
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
Das war mein versucht Code:
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
Leider gibt es in meinem LogicManager
Ich kann save_stuff
nicht nennen, weil es protected
ist. Ich habe nicht die ursprüngliche Methode geschrieben, und ich bin sicher, dass es aus einem bestimmten Grund als protected
markiert ist, also denke ich nicht, dass ich das ändern sollte.
Welche Optionen muss ich noch gut refaktorieren?
Soll die 'LogicClass' ein Kind von' ExcelSheet' sein? Ich sehe nicht, wie Sie die Methode in dieser Klasse aufrufen, wenn sie nicht existiert, außer Sie haben sie woanders definiert? – user1875195
Ich habe etwas mehr Detail hinzugefügt. Dies ist der erste Weg, an den ich denken könnte, um den Code ein wenig zu vereinfachen. – ardavis
Ich sehe die Änderungen, aber ich sehe immer noch nicht, wie Sie 'save_stuff' von der' logic_valid? 'Methode in Ihrer' LogicManager' Klasse erwarten. Die Methode 'save_stuff' ist derzeit in' ExcelSheet' definiert, die keine Beziehung zur Klasse 'LogicManager' hat. – user1875195