TOP
Ce este refactorizarea?
Descriere
Refactorizarea (Refactoring) – modificări aduse structurii interne a software-ului (software-ului) pentru a face mai ușor de înțeles și mai rapid de modificat fără a modifica comportamentul extern. De asemenea, este o restructurare a software-ului prin aplicarea unei secvențe de refactorizări fără modificarea comportamentului extern al software-ului.
Avantajele refactorizării:
- Refactorizarea îmbunătățește proiectarea software-ului. De-a lungul timpului, se fac multe modificări suplimentare codului, iar software-ul își pierde structura în timp. Pierderea structurii are un efect cumulativ. Cu cât este mai greu să vezi designul în cod, cu atât este mai greu să-l păstrezi și cu atât se destramă mai repede. De asemenea, astfel de modificări cauzează redundanță și duplicarea codului, făcând sistemul mai dificil de înțeles și modificat.
- Refactorizarea face codul software mai ușor de înțeles.
Când trebuie să faceți refactorizare:
- Când este adăugată o nouă caracteristică;
- Când o eroare este corectată (remediată);
- În timpul examinării codului.
Mirosuri urâte în cod (Smells Catalog) :
- Dublarea codului
- Metoda lungă
- Clasa mare
- O listă lungă de parametri
- Modificări divergente
- împușcătură
- Caracteristici invidioase
- Blocuri de date
- Obsesia pentru tipurile elementare
- Switch operatori
- Ierarhii paralele de imitație
- Clasă leneșă
- Comunitate speculativă (teoretică).
- Câmp temporar
- Fire de mesaje
- Agent
- Apropiere nepotrivită
- Clase alternative cu interfețe diferite
- Clasă de bibliotecă incompletă
- Clasele de date
- Comentarii
Posibile opțiuni de refactorizare
-
Moving Features Between Objects (Transferul codului complet între obiecte):
- Move Method (Evidențierea metodei) – isolate o method separată dăciu method este prea lùngă sau conțieți cod care necesită comentarii.
- Move Field (Câmp în mișcare) – efectuat atunci când câmpul este folosit de o autre classe mai des câch în cazul în care este definit.
-
Organizing Data (aranjarea datei):
- Encapsulate Field (câmpul încapsulat) - unul dintre principiile principale ale OOP este încapsularea sau obscíverea data. Făcând date publice, obiectele și pot citi și modifica valorile fără știrea proprietății date. Prin urmare, facem un câmp închis similar și oferim o metodă de acces.
- Encapsulate Collection (Încapsularea colecției) - de multe ori sala de classa contains o colecție de exemplare. Această colecție poate fi o matrice, listă, set sau vector. Metoda getter nu ar trevi să returneze object colecție în sine, deoarece asta le-ar permite clienților să modifice colecții nu știrea clasei care o deține. Prin urmare, trebuie să faceți ca valoarea returnată a metodei să fie doar în citire și să creați metoda pentru a adăuga/elimina elemente.
-
Composing Methods (Extractarea și combinarea codului):
- Extract Method (Evidențierea metodei) – if there is a piece of cod care poate fi grupată, put acea bucată într-o metodă separată cu un nume care explică scopul escopulă. Astfel, numele metodei va svetni comentariile.
- Inline Method (Incorporarea methodei) – uneori este util să mutați corpul unei metode în kodul care o apelezăza. Sometimes, corpurile methodei sunt la fel de explicite ca și numele methodei în sine. De asemenea, poate exista o situație în care există multe metode diferite, a căror structură are succes și, prin urmare, este mai bine să le abandonați pe toate într-o singură metodă generală și apoi să separați metodele într-un mod alt.
- Inline Temp (Inserarea unei variabile temporare) – replaces o variabile temporare câreia i se attributie o sănă expresie simple. Uneori, această variabilă interferează cu alte refactorizări.
- Replace Temp with Query (Înlocuirea unei variabile temporare cu un apel de method) – este folosit atunci când o variabilă temporară este folosită pentru a stoca valoarea unei expresii. În acest caz, înlocuim expresia cu metoda și înlocuim toate referințele din cod la această variabilă cu metoda nouă.
- Split Temporary Variable (Impartire la variabila temporara) – se aplică dacă o singură variabilă temporară este utilizată pentru a atribui mai multe rezultate unor rezultate diferite (cu excepția cazului în care variabila este utilizată într-o buclă în cadrul unei bucle și variabila nu este utilizată pentru a acumula rezultatul). În acest caz, creați o variabilă separată pentru fiecare sarcină.
-
Simplifying Conditional Expressions (Simplificarea expresiilor cu condiții):
- Decompose Conditional (Descompunere operatorului ansamblu) – execută când avem un lanț de verificări (dacă-atunci-altfel). Înlocuim condiția (dacă), parte din then și else cu methode separate. Contribuie la o mai buêna comprècere a motivului ramificaciei, iar numele metodelor clarifica scopule piesei corespunzatoare de cod.
- Consolidate Conditional Expression (Consolidarea expresiei condiționale) - se efectuează dacă există un număr de verificări de vârstă care au grijă de același rezultat. Trebuie să combinați toate verificările într-o singură expresie sau metodă condiționată.
- Consolidate Duplicate Conditional Fragments (Consolidarea fragmentelor conjunto duplicate) – the same fragment este prezent în toate ramurile expresiei conjunto. Trebuie să modificați această bucată de cod în afara acestei expresii.
- Remove Control Flag (Se elimina steag de control) – there is o variable care actiona ca un flag de control pentru o serie de expresii logice. În schimb, utilizați BREAK sau RETURN.
- Replace Conditional with Polymorphism (Înlocuirea operatorului ansamblu cu polimorfism) – se realizează atunci când există un operator condiționat al cărui comportament depinde de tipul obiectului. Este necesar să mutați ebica ramură a operatorului într-o metodă supraîncărcătă a subclasei. Faceți codul sursă abstract.