Principio di segregazione dell’interfaccia (ISP), quarto principio S.O.L.I.D.

interfacce separazione

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

  1. Dipendenze ridotte: implementando solo le interfacce rilevanti, le classi non sono gravate da metodi non necessari di cui non hanno bisogno.
  2. Manutenzione più semplice: modifiche o aggiunte a un’interfaccia non influiscono sulle classi non correlate, migliorando la manutenibilità del codice.
  3. 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:

  1. Clienti:
    • Visualizzare i prodotti
    • Aggiungere i prodotti nel carrello
    • Fare ordini
  2. 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

        Autore