Treci la conținutul principal

Interfețe mici

Principiul segregării interfețelor spune: nicio clasă nu trebuie forțată să implementeze metode de care nu are nevoie. În locul unei singure interfețe prea încărcate, cu multe metode, creează mai multe interfețe mici — fiecare clasă implementează doar ceea ce este adevărat pentru ea.

Interfețele din PHP se potrivesc firesc acestei reguli: o clasă declară exact interfețele pe care le implementează — nimic mai mult — iar atunci când un cod are cu adevărat nevoie de mai multe capacități, interfețele mici se combină cu extends. Menținând fiecare interfață minusculă, fiecare listă implements rămâne sinceră.


Interfața prea încărcată

O interfață Worker cu work() și eat() pare inofensivă — până când un robot candidează pentru post. Robotul lucrează fără probleme, dar trebuie să implementeze și eat(), cu... ceva. Răspunsurile fără sens ca acesta sunt semnătura unei interfețe prea încărcate.

Robotul obligat să mănânce

Robotul implementează eat() doar pentru că interfața o cere. Pauza de masă afișează un răspuns care nu ar trebui să existe niciodată — clasa a fost forțată să mintă.

Prompt
Scrie un script PHP care arată o încălcare a Segregării interfețelor: o interfață Worker prea încărcată, cu metodele work și eat, o clasă Human care face ambele lucruri și un Robot obligat să implementeze eat cu un răspuns fără sens. Rulează un tur de lucru și o pauză de masă pentru amândouă, ca să se vadă minciuna impusă robotului.
Ieșire: script PHP

Divizează interfața

Împarte interfața prea încărcată în Worker și Eater. Omul le implementează pe ambele; robotul implementează doar Worker. Turul de lucru primește lucrători, pauza de masă primește mâncători — robotul pur și simplu nu este invitat niciodată la masă și nicio metodă nu minte.

Fiecare clasă implementează doar adevărul ei

Două interfețe mici în locul unei singure interfețe prea încărcate. Robotul nu mai are deloc o metodă eat() — indicația de tip Eater îl ține în afara pauzei de masă în mod automat.

Prompt
Repară interfața prea încărcată în PHP prin divizarea ei: o interfață Worker cu work și o interfață Eater cu eat. Human implementează ambele, Robot doar Worker. Rulează turul de lucru cu ambele și pauza de masă doar cu cei care mănâncă.
Ieșire: script PHP
Each class implements only its truth

Piesele mici se compun

Interfețele mici nu sunt o limitare — ele se combină. Atunci când o funcție are cu adevărat nevoie de ambele capacități, compune-le într-o singură interfață: WorkingEater extends Worker, Eater.

Acesta este modelul: definește interfețe mici și lipește-le cu extends numai acolo unde este într-adevăr nevoie de mai mult.

Compune atunci când ai nevoie de ambele

WorkingEater este construită din cele două interfețe mici cu extends. Omul declară acea singură interfață și astfel este considerat și Worker și Eater — turul de o zi întreagă are nevoie de ambele capacități, așa că doar omul este potrivit.

Prompt
Arată compunerea interfețelor în PHP: combină interfețele mici Worker și Eater într-o interfață WorkingEater folosind extends și scrie o funcție fullDay care o cere, astfel încât doar Human — care implementează WorkingEater — să fie potrivit. Afișează ziua întreagă a omului.
Ieșire: script PHP