Fast alles kann in Bezug auf Kosten und Nutzen analysiert werden, und ich denke, das gilt hier.
Der offensichtliche Vorteil der ersten Option besteht darin, dass sie die Arbeit kurzfristig minimiert und die Wahrscheinlichkeit minimiert, dass etwas kaputt geht, indem der Arbeitscode neu geschrieben wird. Die offensichtlichen Kosten bestehen darin, dass die Codebasis inkonsistent wird. Wenn Sie eine Operation X ausführen, geschieht dies in einigen Teilen des Codes auf eine andere Weise und in einem anderen Teil des Codes auf eine andere Weise.
Beim zweiten Ansatz haben Sie bereits den offensichtlichen Vorteil festgestellt: Konsistenz. Die offensichtlichen Kosten sind, dass Sie Ihren Verstand beugen müssen, um auf eine Weise zu arbeiten, die Sie möglicherweise vor Jahren aufgegeben haben, und der Code bleibt durchweg unlesbar.
Für den dritten Ansatz müssen die offensichtlichen Kosten einfach viel mehr Arbeit leisten. Ein weniger offensichtlicher Preis ist, dass Sie möglicherweise Dinge kaputt machen, die funktionierten. Dies ist besonders wahrscheinlich, wenn (wie so oft) der alte Code unzureichende Tests aufweist, um sicherzustellen, dass er weiterhin ordnungsgemäß funktioniert. Der offensichtliche Vorteil ist, dass Sie (vorausgesetzt, Sie tun es erfolgreich) einen schönen, glänzenden neuen Code haben. Neben der Verwendung neuer Sprachkonstrukte haben Sie die Möglichkeit, die Codebasis zu überarbeiten, was fast immer zu Verbesserungen an sich führt, selbst wenn Sie die Sprache noch genauso verwendeten, wie sie zum Zeitpunkt der Erstellung vorhanden war Arbeit leichter, und es kann durchaus ein großer Gewinn sein.
Ein weiterer wichtiger Punkt: Im Moment scheint es, dass dieses Modul über einen langen Zeitraum hinweg nur minimale Wartung hatte (obwohl das Projekt als Ganzes beibehalten wird). Das deutet darauf hin, dass es ziemlich gut geschrieben und relativ fehlerfrei ist - andernfalls hätte es in der Zwischenzeit wahrscheinlich mehr Wartung erfahren.
Das führt zu einer anderen Frage: Woher stammt die Änderung, die Sie jetzt vornehmen? Wenn Sie einen kleinen Fehler in einem Modul beheben, der die Anforderungen insgesamt noch gut erfüllt, deutet dies darauf hin, dass die Zeit und der Aufwand für die Umgestaltung des gesamten Moduls wahrscheinlich zum größten Teil verschwendet werden - bis sich jemand damit herumschlagen muss Auch hier kann es sein, dass sie sich in etwa an der Position befinden, an der Sie sich gerade befinden. Dabei wird Code beibehalten, der nicht den "modernen" Erwartungen entspricht.
Es ist jedoch auch möglich, dass sich die Anforderungen geändert haben und Sie an dem Code arbeiten, um diese neuen Anforderungen zu erfüllen. In diesem Fall stehen die Chancen gut, dass Ihre ersten Versuche nicht den aktuellen Anforderungen entsprechen. Es besteht auch eine wesentlich größere Wahrscheinlichkeit, dass die Anforderungen einige Überarbeitungsrunden durchlaufen, bevor sie sich wieder stabilisieren. Das bedeutet, dass Sie in (relativ) naher Zukunft mit viel größerer Wahrscheinlichkeit wichtige Arbeiten in diesem Modul ausführen und im Rest des Moduls mit viel größerer Wahrscheinlichkeit Änderungen vornehmen, nicht nur in dem Bereich, den Sie kennen jetzt. In diesem Fall ist es viel wahrscheinlicher, dass die Umgestaltung des gesamten Moduls greifbare, kurzfristige Vorteile mit sich bringt, die die zusätzliche Arbeit rechtfertigen.
Wenn sich die Anforderungen geändert haben, müssen Sie möglicherweise auch prüfen, um welche Art von Änderung es sich handelt und was diese Änderung antreibt. Angenommen, Sie haben Git geändert, um die Verwendung von SHA-1 durch SHA-256 zu ersetzen. Dies ist eine Änderung der Anforderungen, aber der Anwendungsbereich ist klar definiert und recht eng. Sobald Sie SHA-256 ordnungsgemäß gespeichert und verwendet haben, ist es unwahrscheinlich, dass andere Änderungen eintreten, die sich auf den Rest der Codebasis auswirken.
In die andere Richtung tendiert eine Änderung an einer Benutzeroberfläche, selbst wenn sie klein und diskret beginnt, zur Ballonbildung. Das, was als "Ein neues Kontrollkästchen zu diesem Bildschirm hinzufügen" begann, endet also eher wie folgt: "Diese feste Benutzeroberfläche ändern zur Unterstützung von benutzerdefinierten Vorlagen, benutzerdefinierten Feldern, benutzerdefinierten Farbschemata usw. "
Für das erste Beispiel ist es wahrscheinlich am sinnvollsten, Änderungen zu minimieren und auf der Seite der Konsistenz Fehler zu machen. Für letztere zahlt sich ein vollständiges Refactoring viel eher aus.