Was sind einige Best Practices für das Refactoring und Umbenennen in Teamumgebungen? Ich spreche dies mit ein paar Szenarien an:
Wenn eine Bibliothek, auf die häufig verwiesen wird, überarbeitet wird, um eine grundlegende Änderung an einer Bibliothek oder einem Projekt vorzunehmen, auf die bzw. das verwiesen wird. ZB willkürlich den Namen einer Methode ändern.
Wenn Projekte umbenannt werden und Lösungen mit aktualisierten Verweisen darauf neu erstellt werden müssen.
Wenn die Projektstruktur geändert wird, um "besser organisiert" zu sein, indem Ordner eingeführt und vorhandene Projekte oder Lösungen an neue Speicherorte verschoben werden.
Einige zusätzliche Gedanken / Fragen:
Sollten Veränderungen wie diese von Bedeutung sein oder ist der daraus resultierende Schmerz ein Hinweis darauf, dass die Struktur schief gegangen ist?
Wer sollte die Verantwortung für die Behebung von Fehlern im Zusammenhang mit einer Änderung übernehmen? Wenn ein Entwickler eine wichtige Änderung vornimmt, sollte er dafür verantwortlich sein, in betroffene Projekte einzusteigen und diese zu aktualisieren, oder sollte er andere Entwickler benachrichtigen und sie auffordern, Änderungen vorzunehmen?
Ist dies etwas, das planmäßig durchgeführt werden kann, oder sollte es so häufig wie möglich durchgeführt werden? Wenn ein Refactoring zu lange aufgeschoben wird, wird es immer schwieriger, es zu vereinbaren, aber gleichzeitig an einem Tag in Schritten von 1 Stunde einen Build zu reparieren, da an anderer Stelle Änderungen vorgenommen werden.
Handelt es sich um einen formalen Kommunikationsprozess oder kann es sich um einen organischen Prozess handeln?
quelle
Antworten:
Jedes der von Ihnen aufgelisteten Szenarien fällt unter die Kategorie "veröffentlichte API / Code". Dies ist schwer umzugestalten, daher sollte man nichts leichtfertig ändern. Vielmehr sollte er die geplanten Änderungen vorab mit allen Beteiligten aushandeln. Es ist mindestens ebenso ein politisches wie ein technisches Problem.
Der Ratschlag Nummer eins von Martin Fowler lautet daher, dass Sie Ihre Schnittstellen (Projektnamen und -strukturen) nicht vorzeitig veröffentlichen .
Wenn dies jedoch bereits geschehen ist und behoben werden muss, ist es wahrscheinlich besser, die erforderlichen Änderungen in möglichst wenigen Schritten vorzunehmen, um die Störung anderer Parteien zu minimieren. Das weicht ziemlich weit vom ursprünglichen Konzept des Refactorings ab, aber aus gutem Grund.
Wenn möglich, sollten Sie auch die neue Methode hinzufügen (während die vorhandene verworfen wird), anstatt die vorhandene umzubenennen. Dies stellt sicher, dass der Clientcode nicht beschädigt wird, und bietet eine Übergangszeit, in der sie ihren Code aktualisieren können, um der neuesten API zu entsprechen. Der Nachteil ist, dass es Ihre API kompliziert. Obwohl der Status nur vorübergehend ist, kann es einige Zeit dauern, bis Sie veraltete API-Methoden sicher entfernen können (im Fall der Java-Klassenbibliothek Jahre).
quelle
Sie können diese Probleme fast immer vermeiden, indem Sie das Refactoring in zwei Schritten durchführen. Führen Sie im ersten Schritt den neuen Code ein und verwerfen Sie den alten Code. Wenn alle Teams auf den neuen Code migriert sind, löschen Sie den alten Code. Ich verwende diese Technik auch, um ein einzelnes Modul schrittweise umzugestalten. Auf diese Weise kann ich die Menge an Code begrenzen, die zwischen Testläufen geändert werden muss.
quelle
Beachten Sie, dass dies einer der Hauptgründe für einen Build-Server ist, auf dem Tests ausgeführt werden.
Wenn etwas passiert, das ein bestimmtes Programm beschädigt, wird Ihnen dies so schnell wie möglich mitgeteilt, und Sie können den Täter aufspüren und die Probleme beheben, solange die Details noch aktuell sind.
quelle