Cum să-ți disciplinezi codul cu refactorizarea (Include exemple PHP)
Publicat: 2021-06-22La fel ca multe alte lucruri în viață, codul nostru are nevoie și de puțină disciplină. Sunt destul de sigur că niciun dezvoltator din lume nu vrea să scrie cod necurat. Cu toate acestea, codul necurat încă există. Poate apărea din diverse motive - se poate datora presiunii afacerii, lipsei de documentare, lipsei de interacțiune între membrii echipei sau incompetenței dezvoltatorului. Trebuie luate măsurile necesare pentru a face codul mai curat și pentru a evita problemele care pot apărea în viitor din această cauză. Din fericire, putem aborda aceste probleme cu o tehnică disciplinată de restructurare a codului numită Refactoring .
Refactorizarea este o tehnică de îmbunătățire a structurii interne a codului sursă al programului existent și menținerea comportamentului său extern. Este o procedură pas cu pas de îmbunătățire a codului, care altfel ne va costa mult timp și efort.

Dezavantajele Codului necurat
Extinderea dimensiunii codului sursă prin adăugarea de noi programe fără refactorizare pentru o lungă perioadă de timp face codul dezordonat și necurat. Îngreunează foarte mult întreținerea și dezvoltarea ulterioară a proiectului. Codul necurat vine cu o mulțime de dezavantaje:
- Mărește costul de întreținere al proiectului.
- Adăugarea de noi funcții necesită mult timp și uneori devine imposibil de adăugat.
- Încetinește introducerea de oameni noi în proiect.
- Conține cod duplicat.
- Nu trece toate testele.
Există multe alte dezavantaje, dar aceste probleme costă o mulțime de bani și timp organizației.
Avantajele Clean Code
Codul curat și disciplinat are propriile sale avantaje:
- Nu conține cod duplicat.
- Trece toate testele.
- Face codul mai lizibil și mai ușor de înțeles.
- Face codul mai ușor de întreținut și mai puțin costisitor.
Avantajele codului curat sunt multe. Procesul de transformare a unui cod necurat dezordonat într-un cod curat mai ușor de întreținut se numește proces de refactorizare.
Procesul de refactorizare
Refactorizarea ar trebui făcută ca o serie de mici modificări, fiecare dintre ele îmbunătățește ușor codul existent și permite programului să continue să ruleze fără a-l rupe. După refactorizare, codul ar trebui să devină mai curat decât înainte. Dacă rămâne necurat, atunci nu are rost de refactorizare. Este doar o pierdere de timp și efort. Nu trebuie adăugat niciun cod nou în timpul refactorizării pentru a crea funcționalități noi. Ar trebui să treacă toate testele după refactorizare.
Când să refactorizezi
Refactorizarea trebuie efectuată atunci când:
- Adăugarea unui cod duplicat la proiect. Deoarece codul duplicat este greu de întreținut, iar modificările într-un singur loc pot necesita actualizări în multe alte locuri.
- Adăugarea unei caracteristici. Refactorizarea facilitează adăugarea de noi funcționalități.
- Când remediați o eroare, ar trebui să refactorizați, deoarece aceasta va face ca eroarea să fie descoperită automat.
- Revizuirea codului este ultima etapă de refactorizare a codului înainte ca modificările să fie implementate în producție.
Confruntarea cu mirosurile de cod
Problemele legate de cod sunt uneori denumite mirosuri de cod. Acestea sunt problemele abordate în timpul refactorizării. Sunt mai ușor de găsit și de reparat.
De exemplu:
- Metode și clase mari cu care este foarte greu de lucrat.
- Utilizarea incompletă sau incorectă a conceptului de programare orientată pe obiecte.
- Cod care face dificilă adăugarea oricăror modificări.
- Cod duplicat și depreciat în proiect.
- Cod puternic cuplat.
Tehnici de refactorizare
Tehnicile de refactorizare sunt pașii luați pentru a refactoriza codul. Unele dintre tehnicile de refactorizare sunt:
1. Metoda de extragere
// Problemă
function printInvoice() { $this->printHeader(); // Print details. print("name: " . $this->name); print("amount " . $this->getPrice()); }// Soluție

function printInvoice() { $this->printBanner(); $this->printDetails($this->getPrice()); } function printDetails($price) { print("name: " . $this->name); print("amount " . $outstanding); }Dacă aveți un fragment de cod care poate fi grupat, adăugați o nouă metodă pentru acea parte de cod și înlocuiți codul vechi. Face codul mai izolat și elimină dublarea.
2. Extrage variabila
// Problemă
if (($student->getMarksinMath() > 60) && ($student->getMarksInPhysics() > 60) && ($student->getMarksinChemistry() > 60) && $this->pass) { // do something }// Soluție
$mathResult = $student->getMarksinMath() > 60; $physicsResult = $student->getMarksinPhysics() > 60; $chemistryResult = $student->getMarksinChemistry() > 60; $hasPassed = $this->pass; if ($mathResult && $physicsResult && $chemistryResult && $hasPassed) { // do something }Pentru expresii mari precum cea afișată în problemă, care este foarte greu de înțeles, pot fi create diferite variabile pentru fiecare expresie. Face codul mai lizibil. Dar această metodă trebuie aplicată cu prudență. Cu toate acestea, are propriile sale dezavantaje. Codul se va executa chiar dacă condiția este falsă, ceea ce nu este cazul în problemă.
3. Metoda Inline
// Problemă
function printResult() { return ($this->getResult()) ? “Pass” : “Fail”; } function getResult() { return $this->totalMarks > 300; }// Soluție
function getRating() { return ($this->totalMarks > 300) ? “Pass” : “Fail”; }Când corpul metodei este mai evident, utilizați această tehnică. Înlocuiți metoda cu conținutul metodei și ștergeți metoda. Minimizează numărul de metode nedorite.
4. Inline Temp
// Problemă
$mathMark = $student->getMathResult(); return $mathMark > 60;// Soluție
return $student->getMathResult() > 60;Dacă există o variabilă temporară nedorită care deține doar rezultatul expresiei, eliminați variabila cu expresia în sine. Ajută la eliminarea variabilelor inutile.
5. Înlocuiți matricea cu obiect
// Problemă
$row = []; $row[0] = "Virat Kohli"; $row[1] = 70;// Soluție
$row = new Player(); $row->setName("Virat Kohli"); $row->setNumberofCentury(70);Dacă există o matrice cu diferite tipuri de date, înlocuiți-o cu un obiect. Deoarece câmpurile unei clase sunt mai ușor de documentat și întreținut decât matricele cu diferite tipuri de date.
6. Metoda parametrizată
// Problemă
function fivePercentRaise() { } function tenPercentRaise() { }// Soluție
function raise(percent) { }Dacă mai multe metode efectuează acțiuni similare asupra datelor, atunci înlocuiți toate metodele cu o singură metodă și transmiteți datele ca argument(e). Îndepărtează metodele duplicate și redundante.
7. Separați interogarea de modificator
// Problemă
function getInterest() { $this->interestAmount = $this->principal * 10 / 100; return $this->interestAmount; }// Soluție
function setInterest() { $this->interestAmount = $this->principal * 10 / 100; } function getInterest() { return $this->interestAmount; }Dacă o metodă returnează valoare și schimbă obiectul, împărțiți cele două metode. Unul pentru modificare și altul pentru a returna rezultatul. Îndepărtează șansa modificării neintenționate a unui obiect.
