Ich habe in meiner Karriere tatsächlich dreimal ein ziemlich bedeutendes Refactoring durchlaufen. Code neigt zum Verfall. Wenn Ihre Codebasis also lang genug ist, ist ein großer Refactor so gut wie unvermeidlich. Alle meine Beispiele basierten auf privaten Codebasen, was erklären könnte, warum öffentliche Beispiele schwer zu finden sind.
Das erste Mal war eine Anwendung, die, ob Sie es glauben oder nicht, eine grundlegende Architektur hatte, die es ermöglichte, nur mit Nadeldruckern zu arbeiten. Als meine Firma keinen Lieferanten mehr für die Lieferung der Bänder finden konnte, beauftragten sie mich, sie mit einem Laserdrucker arbeiten zu lassen.
Das zweite Mal war eine Migration von mehreren hundert automatisierten Testskripten von C nach Java, teils weil wir bessere plattformübergreifende Fähigkeiten benötigten, teils weil es schwierig wurde, neue C-Entwickler einzustellen.
Das dritte Mal bin ich noch in der Mitte, das eine riesige monolithische Anwendung modularisiert, um Unit-Tests durch Reduzieren der Kopplung und für plattformübergreifende Zwecke zu ermöglichen.
Ich vergleiche die Anstrengung mit dem Bergsteigen. Sie haben dieses große Ziel vor sich, aber Sie gehen es nicht auf Makroebene an. Sie nehmen jeweils einen Haltegriff, haben immer eine enge Fallback-Position und trennen die vorherige Sicherheit erst, wenn die nächste vorhanden ist. Du fängst an, nur kleine inkrementelle Verbesserungen vorzunehmen, und nach einer Weile drehst du dich um und plötzlich gibt es diese schöne Aussicht.
Angenommen, Sie haben beispielsweise 60.000 Dateien mit stark gekoppeltem Code. Sie möchten damit beginnen, es einem Unit-Test zu unterziehen, aber die Abhängigkeiten machen es unmöglich. Wie behebt man das? Sie entkoppeln eine Datei. Sie fügen automatisierte Tests hinzu. Sie kehren zu stabilem Boden zurück, bevor Sie weitermachen. 59.999 mal wiederholen.
Wenn diese einfachen Töne, das ist , weil es ist einfach. Es ist nicht einfach, aber es ist einfach. Es ist zunächst schwer, Fortschritte zu bemerken. Wir sind zwei Jahre in einem scheinbar unmöglichen Refactor und haben wahrscheinlich Jahre vor uns, bis wir fertig sind. Wenn wir jedoch zurückblicken, stellen wir plötzlich fest, wie viel besser der Code bereits geworden ist, und wir konnten weiterhin neue Funktionen bereitstellen an unsere Kunden in der Zwischenzeit.
Die anderen beiden Male arbeiteten auf die gleiche Weise. Sie finden den kleinsten sicheren Schritt, den Sie unternehmen können, und halten ihn, indem Sie die Anwendung immer in einem funktionierenden Zustand halten. Sie sorgen sich nur um das Gesamtbild, um sicherzustellen, dass Sie in die richtige Richtung gehen. Alle Ihre Aktionen sind klein, stetig und inkrementell.