Principio di segregazione dell’interfaccia (ISP), quarto principio S.O.L.I.D.
Il principio di segregazione dell’interfaccia è uno dei cinque principi SOLID
della progettazione orientata agli oggetti.
Una classe dovrebbe avere più interfacce più piccole e focalizzate.
Quindi le classi utilizzatrici scelgono le interfacce rilevanti per loro, riducendo le dipendenze non necessarie.
Tempo di lettura stimato: 3 minuti
ISP e Laravel
In Laravel, il principio di segregazione dell’interfaccia enfatizza la progettazione di interfacce mirate e coese. Invece di creare interfacce monolitiche, è meglio progettare interfacce specifiche per le esigenze delle classi di implementazione.
Consideriamo un’interfaccia per un servizio di caching. Invece di raggruppare tutti i metodi di memorizzazione nella cache in un’unica interfaccia, separiamoli in base alla funzionalità.
// CacheServiceInterface.php
interface CacheServiceInterface
{
public function store($key, $value);
public function retrieve($key);
}
Vantaggi
- Dipendenze ridotte: implementando solo le interfacce rilevanti, le classi non sono gravate da metodi non necessari di cui non hanno bisogno.
- Manutenzione più semplice: modifiche o aggiunte a un’interfaccia non influiscono sulle classi non correlate, migliorando la manutenibilità del codice.
- Leggibilità: il codice diventa più leggibile e autoesplicativo, poiché le classi sono esplicite riguardo alle loro funzionalità.
Esempio
Vediamo ora un esempio di applicazione del principio di segregazione dell’interfaccia in Laravel.
Supponiamo di voler sviluppare una piattaforma di e-commerce. Abbiamo diversi tipi di utenti: clienti e amministratori. Questi utenti hanno funzionalità distinte:
- Clienti:
- Visualizzare i prodotti
- Aggiungere i prodotti nel carrello
- Fare ordini
- Amministratori:
- Gestire i prodotti
- Gestire gli ordini
- Gestire i clienti
In un approccio tradizionale, si potrebbe creare un’unica grande interfaccia denominata UserInterface
che includa tutti i metodi necessari. Ciò porterebbe ad un inutile accoppiamento di funzionalità, rendendo il sistema meno flessibile.
interface UserInterface {
public function viewProducts();
public function addProductsToCart();
public function placeOrders();
public function manageProducts();
public function manageOrders();
public function manageCustomers();
}
Applicazione dell’ISP: ora applichiamo il principio di segregazione dell’interfaccia a questo scenario. Crea interfacce separate per CustomerInterface e AdminInterface
:
interface CustomerInterface {
public function viewProducts();
public function addProductsToCart();
public function placeOrders();
}
interface AdminInterface {
public function manageProducts();
public function manageOrders();
public function manageCustomers();
}
Implementa queste interfacce nelle rispettive classi:
class Customer implements CustomerInterface {
// Implement methods specific to customers
}
class Admin implements AdminInterface {
// Implement methods specific to admins
}
Il principio di segregazione dell’interfaccia è un concetto fondamentale che consiglia la creazione di componenti software mirati e manutenibili. In Laravel, l’applicazione di questo principio garantisce che la base di codice rimanga flessibile, estensibile e facile da comprendere. Segregando le interfacce in base a funzionalità specifiche, si apre la strada a un’architettura applicativa più organizzata e solida.
Letture Correlate
Ercole Palmeri