So disziplinieren Sie Ihren Code mit Refactoring (einschließlich PHP-Beispielen)

Veröffentlicht: 2021-06-22

Wie viele andere Dinge im Leben braucht auch unser Code etwas Disziplin. Ich bin mir ziemlich sicher, dass kein Entwickler der Welt unsauberen Code schreiben möchte. Unsauberer Code existiert jedoch immer noch. Es kann aus verschiedenen Gründen auftreten - möglicherweise aufgrund von Geschäftsdruck, fehlender Dokumentation, mangelnder Interaktion zwischen den Teammitgliedern oder Inkompetenz des Entwicklers. Es müssen angemessene Maßnahmen ergriffen werden, um den Code sauberer zu machen und Probleme zu vermeiden, die in Zukunft aus diesem Grund auftreten können. Glücklicherweise können wir diese Probleme mit einer disziplinierten Methode lösen, um den Code umzustrukturieren, der als Refactoring bezeichnet wird .

Refactoring ist eine Technik, um die interne Struktur des bestehenden Programmquellcodes zu verbessern und sein externes Verhalten beizubehalten. Es ist ein schrittweises Vorgehen, um den Code zu verbessern, was uns sonst viel Zeit und Mühe kostet.

Code Refactoring

Nachteile von unsauberem Code

Das Erweitern der Quellcodegröße durch Hinzufügen neuer Programme ohne langes Refactoring macht den Code unordentlich und unsauber. Es erschwert die Pflege und Weiterentwicklung des Projekts sehr. Unsauberer Code hat viele Nachteile:

  1. Es erhöht die Wartungskosten des Projekts.
  2. Das Hinzufügen neuer Funktionen nimmt viel Zeit in Anspruch und kann manchmal unmöglich werden.
  3. Es verlangsamt die Einführung neuer Leute in das Projekt.
  4. Es enthält doppelten Code.
  5. Es besteht nicht alle Prüfungen.

Es gibt viele andere Nachteile, aber diese Probleme kosten die Organisation viel Geld und Zeit.

Vorteile von Clean Code

Sauberer und disziplinierter Code hat seine eigenen Vorteile:

  1. Es enthält keinen doppelten Code.
  2. Es besteht alle Prüfungen.
  3. Macht den Code lesbarer und verständlicher.
  4. Es macht den Code einfacher zu warten und kostengünstiger.

Die Vorteile von sauberem Code sind vielfältig. Der Prozess, einen unordentlichen unsauberen Code in einen besser wartbaren sauberen Code zu verwandeln, wird als Refactoring-Prozess bezeichnet.

Refactoring-Prozess

Das Refactoring sollte als eine Reihe kleiner Änderungen erfolgen, von denen jede den vorhandenen Code leicht verbessert und es dem Programm ermöglicht, weiterzulaufen, ohne ihn zu beschädigen. Nach dem Refactoring sollte der Code sauberer werden als zuvor. Wenn es unsauber bleibt, ist eine Umgestaltung sinnlos. Es ist nur ein Zeit- und Kraftverlust. Während des Refactorings sollte kein neuer Code hinzugefügt werden, um neue Funktionen zu erstellen. Es sollte alle Tests nach dem Refactoring bestehen.

Wann umgestalten

Refactoring sollte durchgeführt werden, wenn:

  • Hinzufügen von doppeltem Code zum Projekt. Da doppelter Code schwer zu warten ist und Änderungen an einer Stelle möglicherweise Aktualisierungen an vielen anderen Stellen erfordern.
  • Hinzufügen einer Funktion. Refactoring erleichtert das Hinzufügen neuer Funktionen.
  • Wenn Sie einen Fehler beheben, sollten Sie einen Refactoring durchführen, da der Fehler automatisch erkannt wird.
  • Die Codeüberprüfung ist die letzte Phase des Refactorings des Codes, bevor Änderungen in der Produktion bereitgestellt werden.

Umgang mit Code-Gerüchen

Probleme mit dem Code werden manchmal als Code-Geruchs bezeichnet. Dies sind die Probleme, die während des Refactorings behandelt werden. Sie sind leichter zu finden und zu reparieren.

Beispielsweise:

  • Große Methoden und Klassen, die sehr schwer zu handhaben sind.
  • Unvollständige oder falsche Anwendung des objektorientierten Programmierkonzepts.
  • Code, der das Hinzufügen von Änderungen erschwert.
  • Doppelter und veralteter Code im Projekt.
  • Hoch gekoppelter Code.

Refactoring-Techniken

Refactoring-Techniken sind die Schritte, die zum Refactoring des Codes durchgeführt werden. Einige der Refactoring-Techniken sind:

1. Die Extraktionsmethode

// Problem

 function printInvoice() { $this->printHeader(); // Print details. print("name: " . $this->name); print("amount " . $this->getPrice()); }

// Lösung

 function printInvoice() { $this->printBanner(); $this->printDetails($this->getPrice()); } function printDetails($price) { print("name: " . $this->name); print("amount " . $outstanding); }

Wenn Sie über ein Codefragment verfügen, das gruppiert werden kann, fügen Sie eine neue Methode für diesen Codeteil hinzu und ersetzen Sie den alten Code. Es macht den Code isolierter und entfernt Duplikate.

2. Variable extrahieren

// Problem

 if (($student->getMarksinMath() > 60) && ($student->getMarksInPhysics() > 60) && ($student->getMarksinChemistry() > 60) && $this->pass) { // do something }

// Lösung

 $mathResult = $student->getMarksinMath() > 60; $physicsResult = $student->getMarksinPhysics() > 60; $chemistryResult = $student->getMarksinChemistry() > 60; $hasPassed = $this->pass; if ($mathResult && $physicsResult && $chemistryResult && $hasPassed) { // do something }

Für große Ausdrücke, wie sie in der Aufgabe angezeigt werden und die sehr schwer zu verstehen sind, können für jeden Ausdruck unterschiedliche Variablen erstellt werden. Es macht den Code lesbarer. Aber diese Methode sollte mit Vorsicht angewendet werden. Es hat jedoch seine eigenen Nachteile. Der Code wird auch dann ausgeführt, wenn die Bedingung falsch ist, was bei dem Problem nicht der Fall ist.

3. Die Inline-Methode

// Problem

 function printResult() { return ($this->getResult()) ? “Pass” : “Fail”; } function getResult() { return $this->totalMarks > 300; }

// Lösung

 function getRating() { return ($this->totalMarks > 300) ? “Pass” : “Fail”; }

Wenn der Methodenrumpf offensichtlicher ist, verwenden Sie diese Technik. Ersetzen Sie die Methode durch den Methodeninhalt und löschen Sie die Methode. Es minimiert die Anzahl unerwünschter Methoden.

4. Inline-Temp

// Problem

 $mathMark = $student->getMathResult(); return $mathMark > 60;

// Lösung

 return $student->getMathResult() > 60;

Wenn es eine unerwünschte temporäre Variable gibt, die nur das Ergebnis des Ausdrucks enthält, entfernen Sie die Variable mit dem Ausdruck selbst. Es hilft, unnötige Variablen loszuwerden.

5. Array durch Objekt ersetzen

// Problem

 $row = []; $row[0] = "Virat Kohli"; $row[1] = 70;

// Lösung

 $row = new Player(); $row->setName("Virat Kohli"); $row->setNumberofCentury(70);

Wenn ein Array mit verschiedenen Datentypen vorhanden ist, ersetzen Sie dieses durch ein Objekt. Weil Felder einer Klasse einfacher zu dokumentieren und zu verwalten sind als Arrays mit verschiedenen Datentypen.

6. Parametrisierte Methode

// Problem

 function fivePercentRaise() { } function tenPercentRaise() { }

// Lösung

 function raise(percent) { }

Wenn mehrere Methoden ähnliche Aktionen für Daten ausführen, ersetzen Sie alle Methoden durch eine Methode und übergeben Sie die Daten als Argument(e). Es entfernt doppelte und redundante Methoden.

7. Abfrage von Modifikator trennen

// Problem

 function getInterest() { $this->interestAmount = $this->principal * 10 / 100; return $this->interestAmount; }

// Lösung

 function setInterest() { $this->interestAmount = $this->principal * 10 / 100; } function getInterest() { return $this->interestAmount; }

Wenn eine Methode einen Wert zurückgibt und das Objekt ändert, teilen Sie die beiden Methoden auf. Eine zum Ändern und eine zum Zurückgeben des Ergebnisses. Es beseitigt die Möglichkeit einer unbeabsichtigten Änderung eines Objekts.