Treci la conținutul principal

Interfețe mici

Principiul segregării interfețelor spune: niciun tip nu ar trebui obligat să implementeze metode de care nu are nevoie. În loc de o singură interfață supraîncărcată, cu multe metode, fă mai multe interfețe mici — fiecare tip implementează doar ceea ce este adevărat pentru el.

Acesta este, dintre cele cinci, principiul cel mai apropiat de spiritul limbajului Go: biblioteca standard este construită din interfețe minuscule, cele mai cunoscute fiind cele cu o singură metodă pentru citire și scriere, la care se conectează jumătate din ecosistem.


Interfața supraîncărcată

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

Robotul obligat să mănânce

Robotul implementează Eat() doar pentru că interfața o cere. Pauza de prânz afișează un răspuns care nu ar trebui să existe niciodată — tipul a fost obligat să mintă.

Prompt
Scrie un program Go care arată o încălcare a principiului segregării interfețelor: o interfață Worker supraîncărcată, cu metodele Work și Eat, un Human care le face pe amândouă și un Robot forțat să implementeze Eat cu un răspuns fără sens. Rulează un schimb de lucru și o pauză de prânz peste ambele, ca să se vadă minciuna la care robotul este obligat.
Ieșire: program Go și rezultatul capturat

Împarte interfața

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

Fiecare tip implementează doar adevărul său

Două interfețe mici în loc de una supraîncărcată. Robotul nu mai are deloc o metodă Eat() — compilatorul îl ține automat în afara pauzei de prânz.

Prompt
Repară interfața supraîncărcată din Go împărțind-o: o interfață Worker cu Work și o interfață Eater cu Eat. Human le implementează pe amândouă, Robot doar Worker. Rulează schimbul de lucru cu amândouă tipurile, iar pauza de prânz doar cu cei care mănâncă.
Ieșire: program Go și rezultatul capturat
Each type implements only its truth

Piesele mici se compun

Interfețele mici nu sunt o limitare — ele se combină. Când o funcție chiar are nevoie de ambele capacități, le compune pe loc într-o singură interfață: Worker plus Eater.

Acesta este tiparul din biblioteca standard: definește interfețe cu o singură metodă și lasă-l pe cel care are nevoie de mai mult să le lipească împreună.

Compune atunci când ai nevoie de amândouă

WorkingEater este construită din cele două interfețe mici. Schimbul de o zi întreagă are nevoie de ambele capacități, așa că doar omul se califică — spus o singură dată, în sistemul de tipuri.

Prompt
Arată compunerea interfețelor în Go: combină interfețele mici Worker și Eater într-o interfață WorkingEater și scrie o funcție fullDay care o cere, astfel încât doar Human să se califice. Afișează ziua completă a omului.
Ieșire: program Go și rezultatul capturat