Înlocuirea unui operator condiționat cu polimorfism

Refactoring Motive

Această refactorizare vă poate ajuta dacă aveți declarații condiționate în codul dvs. care efectuează diferite locuri de muncă, în funcție de:

  • obiect sau interfață de clasă pe care le implementează;
  • valoarea unuia dintre câmpurile obiectului;
  • rezultatul chemării uneia dintre metodele obiectului.

În acest caz, dacă aveți un nou tip sau o proprietate a obiectului, va trebui să căutați și să adăugați cod la toate instrucțiunile condiționale similare. Astfel, beneficiul acestei refactorizări crește dacă există mai mulți operatori condiționali și sunt împrăștiați pe toate metodele obiectului.







demnitate

  • Această refactorizare pune în aplicare principiul de a vorbi și nu cere. În loc să cereți obiectului despre starea sa și apoi să faceți niște acțiuni pe baza acestui lucru, este mult mai ușor să-i spuneți ce să facă și cum va face el însuși.
  • Ucide duplicarea codului. Scapi de multe declarații condiționale identice.
  • Dacă trebuie să adăugați o nouă implementare, tot ce trebuie să faceți este să adăugați o nouă subclasă fără a atinge codul existent (principiul deschiderii / închiderii).






Ordine de refacere

Pregătirea pentru refactorizare

Pentru a efectua această refactorizare, ar trebui să aveți o ierarhie de clasă gata care să conțină comportamente alternative. Dacă nu există o astfel de ierarhie, trebuie să o creați. Acest lucru poate ajuta alte refactorizări:

  • Înlocuirea codificării subclaselor. În acest caz, pentru toate valorile unei anumite proprietăți a obiectului, vor fi create subclasele acestora. Acesta este un mod simplu, dar mai puțin flexibil, deoarece nu va fi posibil să creați subclase pentru alte proprietăți ale obiectului.
  • Înlocuirea codării statutului / strategiei. În acest caz, pentru o anumită proprietate a obiectului, clasa sa va fi evidențiată, iar subclasele pentru fiecare valoare a acestei proprietăți vor fi create din aceasta. Clasa curentă va conține referințe la obiecte de acest tip și le va delega la execuție.

Pașii ulteriori ai acestei refactorizări implică faptul că ați creat deja o ierarhie.

Etapele refactorizării

  1. Dacă instrucțiunea condiționată este într-o metodă care face altceva, extrageți-o într-o metodă nouă.
  2. Pentru fiecare subclasă a ierarhiei, redefiniți metoda care conține instrucțiunea condiționată și copiați codul corespunzător ramurii corespunzătoare a instrucțiunii.
  3. Eliminați această ramificație din instrucțiunea condiționată.
  4. Repetați înlocuirea până când instrucțiunea condiționată este goală. Apoi ștergeți instrucțiunea condiționată și declarați metoda abstractă.

Înlocuirea unui operator condiționat cu polimorfism

Fugiți pentru pernă, avem 7 ore de conținut aici.

Sau încercați cursul nostru online. Este mult mai interesant decât textul banal.







Trimiteți-le prietenilor: