Artikeleinführung von Wulin.com (www.vevb.com): Das Wort Refactoring wurde ursprünglich von Martin Fowler und Kent Beck definiert. Es handelt sich um eine Änderung, die die interne Struktur der Software erleichtert und die Software leichter zu ändern ist, ohne das sichtbare Verhalten der Software zu ändern. Es ist ein zurückhaltender Weg, um Code zu organisieren und die Wahrscheinlichkeit einer Fehlergenerierung zu minimieren.
Manchmal kommen Programmierer zu mir und sagen, dass sie das Design von etwas nicht mögen, und wir müssen ihm einen umfassenden Wiederaufbau geben, um die Fehler darin zu korrigieren. Oh oh. Das klingt nicht nach einer guten Idee. Und das klingt nicht nach Refactoring ...Das Wort Refactoring wurde ursprünglich von Martin Fowler und Kent Beck definiert. Es handelt sich um eine Änderung, die die interne Struktur der Software erleichtert und die Software leichter zu ändern ist, ohne das sichtbare Verhalten der Software zu ändern. Es ist ein zurückhaltender Weg, um Code zu organisieren und die Wahrscheinlichkeit einer Fehlergenerierung zu minimieren.
Das Ergebnis der Rekonstruktion ist, dass Verknüpfungsmethoden referenziert werden, doppelte und tote Code entfernt werden, was das Design und das Logik klarer macht. Es geht darum, Programmiersprachen besser und schlauer zu verwenden. Es ist der Vorteil, Informationen zu verwenden, die Sie jetzt kennen, aber der Entwickler wusste zu diesem Zeitpunkt nicht - oder benutzte sie nicht. Vereinfachen Sie den Code kontinuierlich, um sie zu verstehen. Machen Sie ihre zukünftigen Veränderungen kontinuierlich einfacher und sicherer.
Während dieses Prozesses wurden Fehler gefunden und Fehler geändert, was keine Rekonstruktion ist. Optimierung ist keine Rekonstruktion. Die Stärkung der Ausnahmeerfassung und das Hinzufügen von vorbeugenden Code ist nicht refaktoriert. Der Code leichter zu testen ist kein Refactoring - obwohl Refactoring den gleichen Effekt erzielen kann. All diese Dinge sind von Vorteil. Aber keines davon ist refaktoriert.
Programmierer, insbesondere diejenigen, die Wartungsarbeiten durchführen, ist eine ihrer täglichen Aufgaben. Dies ist ein grundlegender Job und muss erledigt werden. Der Beitrag von Martin Fowler et al. soll die Best Practice -Methoden zum Refactoring -Code formatieren und die gemeinsamen und nachgewiesenen effektiven Refactoring -Muster - die Ziele des Refactoring und die Schritte des Refactoring - für die Archivklassifizierung archivieren.
Refactoring ist einfach. Wenn Sie Tests vor dem Schreiben von Code so weit wie möglich schreiben, können Sie verhindern, dass Sie Fehler machen. Kleine, unabhängige und sichere strukturelle Anpassungen des Codes und testen Sie sie nach jeder Anpassung, um sicherzustellen, dass Sie die Verhaltensmerkmale des Codes nicht ändern - die Funktionen sind die gleichen wie zuvor, aber der Code sieht anders aus. Refactoring -Modus und moderne IDE -Refactoring -Tools machen das Refactoring -Modus, sicher und kostengünstig.
Refactor nicht zum Umstellen von Refactoring
Refactoring kann als Maßnahme angesehen werden, das Ihren Code ändern kann. Code Refactoring sollte durchgeführt werden, bevor Sie Codeänderungen vornehmen, sodass Sie sicherstellen können, dass Sie den Code verstehen und es einfacher und sicherer machen, Änderungen in den Code einzuführen. Führen Sie einen Regressionstest für Ihre Refactoring -Aktion durch. Dann Korrekturen oder Änderungen vornehmen. Noch einmal testen. Später kann mehr Code neu gestaltet werden, damit Ihre Code -Änderung der Absicht der Absicht klarer wird. Führen Sie erneut den Test ab. Rekonstruieren und ändern Sie es erneut. Oder ändern und dann refaktor.
Sie sind nicht um die Wiederaufnahme von Umgestaltungen umzusetzen, Sie richten sich um, weil Sie andere Dinge tun möchten, und das Refactoring kann Ihnen dabei helfen, diese Dinge zu erreichen.
Der Umfang des Refactorings sollte durch die Codeänderungen oder Codekorrekturen festgelegt werden, die Sie implementieren müssen - was sollten Sie tun, um die Codeänderungen sicherer und prägnanter zu gestalten? Mit anderen Worten: Umgesteckt nicht umzublicken, um neu zu refaktorieren. Neu den Code, den Sie nicht ändern möchten, nicht ändern oder sich nicht ändern.
Scratch Refactoring für Verständnis (Scratch Refactoring)
Michael Featers Buch "effektiv mit dem Legacy Code arbeiten" erwähnt das Konzept des Kratzers, das Refactoring zu veranlassen. Martin Fowler nennt es Refactoring zum Verständnis. Dies wird verwendet, um mit dem Code umzugehen (oder kann nicht ausstehen), den Sie nicht verstehen, und sie aufzuräumen, damit Sie ein besseres Verständnis dafür haben können, was sie tun, bevor Sie ihn tatsächlich ändern, und es wird Ihnen auch helfen, diese Codes zu debuggen. Sobald Sie die wahre Absicht einer Variablen oder Methode verstehen können, sie umbenennen, ihnen einen angemesseneren Namen geben, den Code löschen, den Sie nicht gerne lesen (oder nutzlos finden), komplexe bedingte Aussagen zerlegen und lange Programme in mehrere leicht verständliche Mini-Programme unterteilen.
Machen Sie sich keine Sorgen, diese Änderungen zu überprüfen oder zu testen. Dies soll Ihren Rekonstruktion schnell vorantreiben. Dies ermöglicht diese Codes und wie sie laufen, um einen schnellen, aber unvollständigen Prototyp in Ihrem Gehirn zu erzeugen. Lerne daraus und wirf sie weg. Mit einer kurzen Rekonstruktion können Sie auch verschiedene Rekonstruktionsmethoden ausprobieren und mehr Rekonstruktionstechniken erfahren. Michael Feathers schlägt vor, dass Sie auf Dinge achten sollten, die in diesem Prozess nutzlos oder besonders nützlich erscheinen, damit Sie die Dinge richtig machen können, nachdem Sie diese Übung abgeschlossen haben und sie wirklich ändern - ein wenig zu Stück bei der Änderung, achten Sie auf die Methode und ändern und testen Sie sie.
Was ist groß angelegte Rekonstruktion?
Einfache, aber offensichtliche Rekonstruktion des Codes: Beseitigen Sie die Duplikation, ändern und ändern Sie die Variablen und Methodennamen, um ihn aussagekräftiger zu machen, die Methoden zu verfeinern, um den Code zu verstehen und wiederzuverwenden, die bedingte Logik zu vereinfachen, bedeutungslose Zahlen durch benannte Variablen zu ersetzen und ähnliche Codes zusammenzubringen. Durch diese Refactorings können Sie in Bezug auf die Verständlichkeit und Wartbarkeit von Code enorme Belohnungen erhalten.
Im Vergleich zu diesen kleineren Inline -Rekonstruktionen unterscheiden sich signifikantere Designrekonstruktionen erheblich von ihnen - dies ist, was Martin Fowler als große Rekonstruktionen bezieht. Große, kostspielige Änderungen sind mit vielen technischen Risiken verbunden. Dies ist kein Reinigungscode und Designverbesserung in Ihrem Programmierungsprozess: Es ist eine grundlegende Neugestaltung.
Einige Leute nennen es gerne Neugestaltung oder schreiben oder neu ein System neu auf oder überarbeiten ein System, das als groß angelegte Rekonstruktion bezeichnet wird. Da diese technisch die funktionalen Merkmale der Software - Geschäftslogik, Softwareeingabe und Ausgabe - nicht ändern, sind immer noch die gleichen wie zuvor, aber die Entwurfs- und Code -Implementierung haben sich geändert. Der Unterschied zwischen IT und konventioneller Rekonstruktion scheint zu sein: Einer besteht darin, ein Stück Code neu zu schreiben, und das andere ist, ein System neu zu schreiben. Solange Sie es Schritt für Schritt tun, können Sie es als Rekonstruktion bezeichnen - unabhängig davon, ob Sie ein altes System durch Jahre mit neuem Code oder groß angelegte Transformation der Systemarchitektur ersetzt werden.
Das Refactoring in großem Maßstab wird schrecklich sein. Es kann Wochen, Monate (oder sogar Jahre) dauern, bis Sie abgeschlossen sind, und Sie müssen Änderungen an vielen Teilen der Software vornehmen. Die Software wird dadurch nicht ausgeführt, und diese Änderungen müssen mehrmals freigegeben werden. Sie müssen vorübergehende Gerüste und Problemumgehungen durchführen - insbesondere wenn Sie agile Entwicklungsmethoden mit kurzer Zyklus verwenden. Zu diesem Zeitpunkt ist eine praktische Methode wie Branch by Abstract nützlich, mit der Sie über einen langen Zeitraum Änderungen in Ihrem Code verwalten können.
Und während Sie einen neuen Code entwickeln, müssen Sie auch den alten Code beibehalten, wodurch sich die Codeversion steuern lässt, die sich sehr bemüht, den Code sehr zerbrechlich und leicht zu fehlerhaft zu machen - dies widerspricht dem beabsichtigten Zweck des Wiederaufbaus. Manchmal wird diese Situation fortgesetzt - dieser Prozess der Abwechslung neuer und alter Code kann niemals abgeschlossen werden, da der beste Nutzen zuerst erfolgt oder weil der Berater, der die Idee ursprünglich mitgebracht hat, etwas anderes getan hat oder das Budget reduziert wurde, und Sie es hassen, ein solches Aufschubprojekt beizubehalten.
Diese sind Refactoring-thesis nicht
Es ist falsch, das Konzept der Rekonstruktion in eine solche Hochleistungsprojektentwicklung einzubeziehen. Grundsätzlich sind sie eine andere Art von Arbeit mit völlig unterschiedlichen Entwicklungskosten und Risiken. Es verwirrt das Verständnis der Menschen, was Rekonstruktion ist und was Rekonstruktion kann.
Refactoring kann und sollte in Ihren Code -Prozess integriert werden - als integraler Bestandteil des täglichen Entwicklungs-/Qualitätsmanagements, genau wie das Schreiben von Tests und Code -Bewertungen. Das Refactoring sollte leise, kontinuierlich und unaufhaltsam abgeschlossen sein. Es erfordert, dass wir unsere Arbeitsenergie in sie unterteilen, und es muss seine Existenz in unserer Bauzeitbewertung und Risikobewertung berücksichtigen. Wenn Sie korrekt erledigt sind, müssen Sie diesen Teil der Arbeit nicht an Außenstehende erklären oder überprüfen.
Ein paar Minuten oder ein oder zwei Stunden zum Refactor ist wie eine Änderung in Ihrem Entwicklungsprozess und Teil der Arbeit. Wenn Sie Tage oder länger brauchen, ist es kein Refactoring; Es ist ein Umschreiben oder eine Neugestaltung. Wenn Sie einen Teil der Zeit (oder den gesamten Sprint -Zyklus) ausdrücklich beiseite legen müssen, um den Code neu zu gestalten, müssen Sie die Genehmigung für die Bereinigung des Codes beantragen oder den Code als Entwicklungsanforderung bereinigen. Wenn Sie die Refactoring -Techniken und -Teplätze verwenden, können Sie eine andere Art von Arbeiten verwenden.
Einige Programmierer glauben, dass es ihr Recht und ihre Verpflichtung ist, grundlegende und erhebliche Änderungen am Code vorzunehmen, und sie werden sie im Namen des Refactorings neu gestalten und neu schreiben, damit sie ihre Fähigkeiten in Zukunft nicht enttäuschen werden. Neugestaltung und Umschreiben ist manchmal das Richtige. Aber aus Offenheit und Klarheit geben Sie diesen Aktivitäten bitte nicht den Namen des Wiederaufbaus.