Bevor Martin Fowlers Buch "Refactoring: Verbessern des Designs von vorhandenem Code" herauskam, nannten wir größere Änderungen an Code "Rearchitecture" und kleinere Änderungen "Cleanup". IMO, Refactoring-Techniken sind alles vernünftige / offensichtliche Dinge, die wir schon immer getan haben.
Glauben Sie, dass Refactoring jemals etwas Neues war? Vielleicht nur eine Möglichkeit, das Management dazu zu bringen, Zeit für die Codebereinigung zuzuweisen?
design
refactoring
terminology
Chuck Stephanski
quelle
quelle
Antworten:
Refactoring ist älter als die Hügel, also nein, es ist nichts Neues.
Und Refactoring räumt nicht auf. Nun, es kann sein, aber es ist nicht auf das Aufräumen beschränkt.
Es geht darum, die Architektur Ihrer Anwendung (egal ob groß oder klein) anzupassen und dabei das Verhalten zu erhalten.
Das bedeutet, dass während ein Teil Ihrer Anwendung gestern möglicherweise perfekt sauber und in Ordnung war, die heutige neue Funktion eine Anpassung dieses Teils erfordert, um die neue Funktion aufzunehmen.
Sie möchten vorhandene Funktionen nicht beeinträchtigen, also passen Sie die Struktur Ihrer Anwendung an, während Sie das Verhalten beibehalten - das Refactoring.
Unabhängig davon, welche Änderungen am Code vorgenommen werden, sollte man immer seine Tests durchführen ... nur für den Fall.
quelle
Es räumt nur den Code auf. Im Wesentlichen bemerkten Programmierer (insbesondere Martin Fowler), dass sie dazu neigten, jedes Mal dieselben Aufgaben auszuführen, wenn sie ihren Code aufräumten. Sie definierten und beschrifteten die Aufräummethoden und die damit verbundenen Codeprobleme und Presto! Refactoring war geboren.
Ähnlich verhält es sich mit Entwurfsmustern - die Leute bemerkten, dass sie bei bestimmten Problemen immer wieder dieselben Ansätze verwendeten. Sie haben die Ansätze benannt und definiert, und jetzt scheinen Sie kein wirklicher Programmierer zu sein, es sei denn, Sie verwenden immer nur etwa ein Dutzend Muster in Ihrem Code.
Refactoring ist keine Magie. Es ist nur ein neuer Satz von Jargon, um eine alte Praxis zu beschreiben.
quelle
Wir machen drei getrennte Dinge in unserem Unternehmen, mit der zugewiesenen Zeit für die drei:
Beispiel: Aufteilen einer hässlichen und unlesbaren 100-Zeilen-Methode, die vier Aufgaben in vier wiederverwendbare Methoden mit jeweils 25 Zeilen erledigt.
Beispiel: Entfernen von kommentiertem Code, nachdem sichergestellt wurde, dass dieser Code nicht mehr benötigt wird.
Beispiel: Hinzufügen
Culture.Invariant
instring.Format
(oder eine andere Kultur , die besser geeignet ist).In meinem Fall ist Refactoring also etwas ganz anderes als Aufräumen . Bei Bereinigung tun, muss ich nicht wieder Unit - Tests laufen: wenn der Code gearbeitet, es wird nach der Bereinigung arbeiten. Mit anderen Worten, es ist nicht so, dass ich eine leere Zeile entfernt oder einen Kommentar hinzugefügt habe, dass der Code nicht mehr funktioniert. Wenn ich andererseits komplizierte Teile eines alten Codes überarbeite, kann ich einige Fehler machen, so dass ich nach der Überarbeitung Komponententests durchführen muss.
quelle
Refactoring erweitert Ihren Code um Wissen. Wenn Sie wissen, dass etwas falsch benannt ist, geben Sie ihm einen besseren Namen. Wenn Sie wissen, dass etwas besser gemacht werden kann, verwandeln Sie es in etwas Besseres.
Es sind viele kleine und große Schritte, die hoffentlich zu einem besseren Programm führen.
quelle
Ich bin einverstanden mit "Refactoring ist ein schickes Wort für die Bereinigung Ihres Codes", aber nicht mit "nur". Menschen verwenden ausgefallene Wörter aus einem Grund: Manchmal, weil sie schlau aussehen wollen, und manchmal, weil sie eine größere oder präzisere Bedeutung vermitteln, und IMHO-Refactoring (auch wenn es gelegentlich missbraucht wird) bezieht sich im Allgemeinen auf Letzteres.
"Aufräumen" könnte alles bedeuten, von "ein bisschen neu formatieren" bis "große Teile neu schreiben".
"Refactoring" bedeutet insbesondere so etwas wie "kleine inkrementelle Änderungen am Code, die darauf abzielen, die gleiche Funktionalität beizubehalten und ihn gleichzeitig in ein besseres Design umzuwandeln". Und es gibt eine Reihe bewährter Methoden für die Art der Dinge, die Sie tun: Einige sind ad-hoc, aber es gibt allgemeine Prinzipien, wie die Verwendung von Komponententests, das Extrahieren eines Teils von Funktionen in neue Funktionen oder Klassen usw., die Menschen lernen können und sollten .
Sie sagen "Betrügen Sie die Verwaltung einfach damit, Zeit für die Code-Bereinigung zuzuweisen". Aber wenn die Aussage "Refactoring" das Konzept richtig vermittelt, dass sich eine stetige Investition in Klarheit in Zukunft für die Effizienz auszahlt, dann ist dies kein "Trick", sondern eine klare und effektive Kommunikation.
quelle
Refactoring bedeutet Code, während Normalisierung relationale Daten bedeutet. Es geht darum, Konzepte in klarere, klarere und effizientere Darstellungen ihrer Rolle in der Anwendung zu abstrahieren.
quelle
Es kommt darauf an, wie Sie den Begriff Refactoring verstehen. Für die meisten Menschen ist dies ein Prozess der Strukturverbesserung, ohne das Verhalten zu ändern. Wenn Sie damit einverstanden sind, dann haben Sie es schon lange vor Erscheinen dieses Buches getan. Ich weiß, weil ich (unter anderem) Klassen umbenannt, Klassen extrahiert und Methoden extrahiert habe, bevor das Buch geschrieben wurde. Ich nannte es nicht Refactoring, aber im Grunde tat ich genau das Gleiche.
Für mich persönlich ist Refactoring das, was heute als "automatisiertes Code-Refactoring" bezeichnet wird, dh die Unterstützung verschiedener Refactoring-Techniken in einer IDE. Dies ist eine echte Verbesserung gegenüber dem, was ich vorher gemacht habe (was in der Tat sehr schmerzhaft war). Ich kann eine Änderung in einer Klasse durchführen und mache mir keine Sorgen, wie sich dies auf den Rest der Software auswirken wird. Ich denke, Martin hat die Refactoring-Technik so weit formalisiert, dass sie als Algorithmus dargestellt und somit in verschiedenen IDEs implementiert werden kann.
Wenn Sie Refactoring also als Prozess verstehen, ist es nichts Neues. Wenn Sie es als Automatisierung ansehen, dann ist es eine enorme Verbesserung. Versuchen Sie, einige Kernklassen (buchstäblich nicht durch Refactoring-Optionen Ihrer IDE) in einem relativ großen Projekt umzubenennen, um zu sehen, warum :)
quelle
Refactoring ist in der Tat eine Code-Bereinigung, aber auch eine Umstrukturierung des Codes. In meinem Team ist Refactoring in der Regel das Letztere. Wenn wir einen "Refactor" -Fall haben, nehmen wir uns Zeit, um unseren Code neu zu strukturieren, z. B. um ihn an eine neue Architektur oder ein neues Informationsmodell anzupassen oder um ihn effizienter zu gestalten.
Code "Bereinigung" ist etwas, das wir kontinuierlich ohne speziell zugewiesene Zeit dafür tun. Für mich bedeutet "Aufräumen" normalerweise Umbenennen, Entfernen von Kommentaren usw.
quelle
Ich würde Nein sagen.
Möglicherweise wird der Refactoring-Prozess aufgeräumt, es ist jedoch nicht das Wesentliche.
Die Bereinigung geht von der Annahme aus, dass der vorherige Code nicht sauber ist. In der Realität überarbeiten Entwickler ihren Code, selbst wenn der ursprüngliche Code bereits sauber ist.
DRY ist ein wesentlicher Antrieb für das Refactoring.
Beim Hinzufügen neuer Codes zu einer vorhandenen Codebasis erfolgt das Refactoring natürlich aufgrund des DRY-Prinzips.
Nur meine 0.02
quelle
Das Bereinigen Ihres Codes ist wie das Aufräumen Ihres Hauses, das Umgestalten wie das Einreißen einer Mauer und möglicherweise das Aufstellen an einer anderen Stelle
quelle
Wenn jemand anderes Ihr Haus aufräumt, können Sie nichts finden, weil das Ziel darin besteht, die Dinge sauber und aus dem Weg zu räumen. Refactoring würde Räume, Schränke, Schränke, Regale, Mülleimer usw. bauen und etikettieren. Es enthält immer noch die meisten gleichen Dinge (Sie können immer noch ein gegrilltes Käsesandwich in der Küche machen und es im Wohnzimmer essen), sollte es aber machen leichter zu finden und möglicherweise effiziente Orte zu haben, um neue Dinge zu setzen.
quelle
Der Begriff Refactoring ist elegant aus der Algebra entlehnt. Es bedeutet, die Begriffe zu vereinfachen, um dasselbe Ergebnis zu erzielen. Es war nicht nur elegant, sondern auch revolutionär - es erforderte eine harte, endliche Herangehensweise an Ihren Code auf einem Niveau, das viele überraschte. Und so war der Begriff selbst bedeutsam und hilfreich.
quelle
Refactoring verbessert die Struktur, ohne das Verhalten zu ändern. Refactoring im engeren Sinne setzt eine gute Testdisziplin voraus. Dies ist nicht unbedingt erforderlich, wenn Sie "aufräumen".
quelle
Die beiden überlappen sich ein wenig an den Rändern, aber für mich ist es der Unterschied zwischen der Reinigung des Hauses und dem Umbau des Hauses. Bereinigung impliziert für mich keine strukturellen Änderungen, Refactoring hingegen schon.
quelle
"Refactoring" ist eigentlich dasselbe wie "Rearchitektur", aber mit einer stärkeren Konnotation von "keine Funktionsänderungen". Dies ist auch klarer im Hinblick auf das Ziel der Neuarchitektur, bei der es häufig darum geht, allgemeinen Code in wiederverwendbare Blöcke zu "zerlegen".
quelle