Das Problem bei einem größeren Refactoring ist, dass Sie manchmal einem Weg folgen können und werden, der Sie zu der Erkenntnis führt, dass Sie mehr abgebissen haben, als Sie kauen können. Riesen-Refactorings sind ein Fehler. Wenn das Systemdesign in erster Linie fehlerhaft ist, dauert das Refactoring möglicherweise nur so lange, bis Sie eine harte Entscheidung treffen müssen. Lassen Sie das System so, wie es ist, und arbeiten Sie daran herum, oder planen Sie eine Neugestaltung und einige wesentliche Änderungen.
Es geht aber auch anders. Der eigentliche Vorteil des Refactorings von Code besteht darin, dass die Dinge einfacher, leichter zu lesen und noch einfacher zu warten sind. Wenn Sie sich einem Problem nähern, über das Sie unsicher sind, führen Sie eine Änderung durch, gehen Sie so weit, um herauszufinden, wohin sie führen könnte, um mehr über das Problem zu erfahren, werfen Sie dann die Spitze weg und wenden Sie ein neues Refactoring basierend auf der Spitze an hat dich gelehrt. Die Sache ist, Sie können Ihren Code wirklich nur mit Sicherheit verbessern, wenn die Schritte klein sind und Ihre Umgestaltungsbemühungen Ihre Fähigkeit, Ihre Tests zuerst zu schreiben, nicht übersteigen. Die Versuchung besteht darin, einen Test zu schreiben, dann einen Code und dann einen weiteren Code, da eine Lösung möglicherweise naheliegend erscheint. Sie werden jedoch bald feststellen, dass sich durch Ihre Änderung viel mehr Tests ändern werden. Sie müssen also darauf achten, dass Sie jeweils nur eine Änderung vornehmen.
Die Antwort lautet daher: Machen Sie aus Ihrem Refactoring niemals ein großes. Kleine Schritte. Beginnen Sie mit dem Extrahieren von Methoden und versuchen Sie dann, die Duplizierung zu entfernen. Fahren Sie dann mit dem Extrahieren von Klassen fort. Jeweils in winzigen Schritten eine kleine Veränderung nach der anderen. Wenn Sie Code extrahieren, schreiben Sie zuerst einen Test. Wenn Sie Code entfernen, entfernen Sie ihn und führen Sie die Tests aus. Entscheiden Sie, ob die fehlerhaften Tests nicht mehr benötigt werden. Ein winziger Babyschritt nach dem anderen. Es scheint, als würde es länger dauern, aber Ihre Refactoring-Zeit wird sich tatsächlich erheblich verkürzen.
Die Realität ist jedoch, dass jeder Spike scheinbar eine potenzielle Verschwendung von Aufwand ist. Codeänderungen gehen manchmal nirgendwo hin und Sie stellen fest, dass Sie Ihren Code von Ihrem vcs wiederherstellen. Dies ist nur eine Realität dessen, was wir von Tag zu Tag tun. Jeder Spike, der ausfällt, wird jedoch nicht verschwendet, wenn er Ihnen etwas beibringt. Bei jedem fehlgeschlagenen Refactoring werden Sie feststellen, dass Sie entweder zu schnell versuchen, zu viel zu tun, oder dass Ihr Ansatz möglicherweise falsch ist. Auch das ist keine Zeitverschwendung, wenn Sie etwas daraus lernen. Je mehr du dieses Zeug machst, desto mehr lernst du und desto effizienter wirst du dabei. Mein Rat ist, es erst einmal zu tragen, zu lernen, mehr zu tun, indem man weniger tut, und zu akzeptieren, dass dies so ist, wie es wahrscheinlich sein muss, bis man besser erkennt, wie weit man einen Spike nimmt, bevor er Sie nirgendwohin führt.