Middle
După ce principiu sunt grupate și separate metodele în interfețe?
sobes.tech AI
Răspuns de la AI
Metodele din interfețe sunt grupate și separate conform principiului de coeziune a comportamentului și principiului de contract explicit.
- Coeziunea comportamentului: Metodele care reprezintă un set unic de operații cu o entitate sau care efectuează acțiuni similare sunt grupate într-o singură interfață. Acest lucru îmbunătățește lizibilitatea codului, facilitează înțelegerea scopului interfeței și crește reutilizarea acesteia.
- Contractul explicit: Interfața descrie un contract explicit pe care clasele care o implementează trebuie să îl respecte. Fiecare metodă din interfață face parte din acest contract. Metodele sunt împărțite între diferite interfețe dacă reprezintă aspecte diferite ale comportamentului sau dacă implementarea lor poate varia independent. De exemplu, interfața
Readablepoate conține metode pentru citirea datelor, iarWritablepentru scriere. O clasă poate implementa una sau ambele interfețe, în funcție de capacitățile sale.
Această abordare sprijină principiile SOLID, în special:
- Principiul responsabilității unice: Interfața are un singur motiv pentru schimbare — schimbarea setului de comportamente pe care îl descrie.
- Principiul segregării interfețelor: Clienții nu trebuie să depindă de interfețe pe care nu le utilizează. Divizarea interfețelor mari în interfețe mai mici și mai concentrate permite claselor să implementeze doar acele interfețe de care au cu adevărat nevoie.
Exemplu:
Presupunem că avem o entitate care poate fi salvată și încărcată. În loc de o singură interfață Persistable cu două metode save() și load(), este mai bine să creăm două interfețe separate:
// Interfață pentru entități salvabile
interface Savable
{
public function save(): void;
}
// Interfață pentru entități încărcabile
interface Loadable
{
public function load(): void;
}
O clasă care poate fi salvată și încărcată implementează ambele interfețe:
// Clasă care implementează ambele interfețe
class DataObject implements Savable, Loadable
{
public function save(): void
{
// Logica de salvare
}
public function load(): void
{
// Logica de încărcare
}
}
O clasă care este doar salvată implementează doar Savable:
// Clasă care implementează doar interfața Savable
class TempData implements Savable
{
public function save(): void
{
// Logica de salvare a datelor temporare
}
}
Aceasta permite proiectarea claselor și a dependențelor lor într-un mod mai flexibil.