TOP
Was ist Refactoring?
Beschreibung
Refactoring (Refactoring) – Änderungen an der internen Struktur der Software (Software), um sie leichter verständlich und schneller modifizierbar zu machen, ohne das äußere Verhalten zu ändern. Außerdem handelt es sich um eine Umstrukturierung der Software durch die Anwendung einer Reihe von Refactorings, ohne das äußere Verhalten der Software zu ändern.
Vorteile des Refactorings:
- Refactoring verbessert das Softwaredesign. Im Laufe der Zeit werden viele zusätzliche Änderungen am Code vorgenommen und die Software verliert mit der Zeit ihre Struktur. Der Strukturverlust wirkt sich kumulativ aus. Je schwieriger es ist, das Design im Code zu erkennen, desto schwieriger ist es, es beizubehalten, und desto schneller zerfällt es. Darüber hinaus führen solche Änderungen zu Redundanz und Duplizierung des Codes, wodurch das System schwieriger zu verstehen und zu ändern ist.
- Durch Refactoring wird Softwarecode verständlicher.
Wenn Sie ein Refactoring durchführen müssen:
- Wenn eine neue Funktion hinzugefügt wird;
- Wenn ein Fehler korrigiert (behoben) wird;
- Während der Codeüberprüfung.
Schlechte Gerüche im Code (Smells Catalog) :
- Code-Duplizierung
- Lange Methode
- Große Klasse
- Eine lange Liste von Parametern
- Abweichende Modifikationen
- Schussschießen
- Neidische Merkmale
- Datenblöcke
- Besessenheit von Elementartypen
- Switch Betreiber
- Parallele Hierarchien der Nachahmung
- Faule Klasse
- Spekulative (theoretische) Gemeinschaft
- Temporäres Feld
- Nachrichtenthreads
- Agent
- Unangemessene Nähe
- Alternative Klassen mit unterschiedlichen Schnittstellen
- Unvollständige Bibliotheksklasse
- Datenklassen
- Kommentare
Mögliche Refactoring-Optionen
-
Moving Features Between Objects (Übertragung des kompletten Codes zwischen Objekten):
- Move Method (Methodenhervorhebung) – Isolieren Sie eine separate Methode, wenn die Methode zu lang ist oder Code enthält, der Kommentare erforderlich ist.
- Move Field (Bewegtes Feld) – wird ausgeführt, wenn das Feld einer anderen Klasse häufig als Tür verwendet wird, in der es definiert wird.
-
Organizing Data (Datenanordnung):
- Encapsulate Field (Feldkapselung) - Eines der Hauptprinzipien von OOP ist die Kapselung oder das Bergen von Daten. Durch die Veröpflichung von Daten können Objekte ihre Werte ohne Wissen des Dateneigentums lesen und ändern. Deshalb machen wir ein solches Feld geschlossen und stellen Zugriffsmethoden bereit.
- Encapsulate Collection (Sammlungkapselung) - Oftmals gibt es im Klassenzimmer eine Probensammlung. Diese Sammlung kann ein Array, eine Liste, eine Menge oder ein Vektor sein. Die Getter-Methode sollte das Sammlungsobjekt nicht selbst zurückgeben, da dies es Clients umbehöglich würden, den Inhalt der Sammlung ohne Wissen der Klasse, die sie besitzt, zu ändern. Daher müssen Sie den von der Methode zurückgegebenen Wert schreibgeschützt machen und Methoden zum Hinzufügen/Entfernen von Elementen erstelten.
-
Composing Methods (Code extrahieren und kombinieren):
- Extract Method (Methodenhervorhebung) – Wenn es einen Codeteil gibt, der gruppiert werden kann, fügen Sie diesen Teil in einer separaten Methode mit einem Namen ein, der seinen Zweck erklärt. Somit ersetzt der Methodenname die Kommentare.
- Inline Method (Methodeneinbettung) – Manchmal ist es nützlich, den Hauptteil einer Methode in den Code zu verschieben, der sie aufruft. Manchmal sind Methodenkörper selbsterklärend wie der Methodenname selbst. Es kann auch vorkommen, dass es viele verschiedene Methoden gibt, deren Struktur nicht erfolgreich ist. Daher ist es besser, sie alle in einer allgemeinen Methode zusammenzufassen und die Methoden dann auf andere Weise zu trennen.
- Inline Temp (Einfügung einer temporaren Variablen) – Ersetzen einer temporären Variablen, die nur einmal ein einfacher Ausdruck zwird zwirt. Manchmal stört eine solche Variable andere Refactorings.
- Replace Temp with Query (Ersetzen einer temporaren Variable durch einen Methodenaufruf) – wird verwendet, wenn eine temporäre Variable zum Speichern des Werts eines Ausdrucks verwendet wird. In diesem Fall erstens wir den Ausdruck durch eine Methode und erstens alle Verweise im Code auf diese Variable durch die neue Methode.
- Split Temporary Variable (Eine temporale Variable aufteilen) – Gilt, wenn eine einzelne temporäre Variable verwendet wird, um mehrere Ergebnisse verschiedener Ergebnisse zuzuordnen (es sei denn, es handelt sich um eine Variable, die in einer Schleife innerhalb einer Schleife verwendet wird und keine Variable zum Accumulieren des Ergebness). In diesem Fall erstellen wir für jede Zuweisung eine eigene Variable.
-
Simplifying Conditional Expressions (Vereinfachte Ausdrücke mit Bedingungen):
- Decompose Conditional (Zerlegung des bedingten Operators) – wird Geschäfte, wenn wir eine bedingte Prüfkette haben (if-then-else). Wir ersetzen die Bedingung (if), Teile von then und else durch separate Methoden. Trägt zu einer besseren Verdungen des Grundes für die Verzweigung bei, und Methodennamen verdeutlichen den Zweck des entsprechenden Codeabschnitts.
- Consolidate Conditional Expression (Konsolidierung bedingter Ausdrücke) - wird gewichtigt, wenn mehrere Zustandsprüfengen das gleiche Ergebnis liefern. Sie müssen alle Prüfungen in einem einsteinbedingten Ausdruck oder einer einsteinbedingten Methode kombinieren.
- Consolidate Duplicate Conditional Fragments (Konsolidierung duplizierter bedingter Fragmente) – Das gleiche Fragment ist in allen Zweigen des bedingten Ausdrucks vorhanden. Sie müssen diesen Codeabschnitt aus diesem Ausdruck verschieben.
- Remove Control Flag (Kontrollflag entfernt) – Es gibt eine Variable, die als Steuerflag für eine Reihe logischer Ausdrücke erfolgt. Wir verwenden stattdessen BREAK oder RETURN.
- Replace Conditional with Polymorphism (Ersetzen des bedingten Operators durch Polymorphismus) – wird geschreibungen, wenn ein bedingter Operator vorhanden ist, dessen Verhalten vom Objekttyp abhängt. Es ist notwendig, jeden Zweig des Bildungsbetreibers in eine überladene Methode der Unterklasse zu versetzen. Machen Sie den Quellcode abstrakt.