Sobes.tech
Middle

Cos'è una facciata (Facade)?

sobes.tech AI

Risposta dell'AI

La facciata è un pattern di progettazione strutturale che fornisce un'interfaccia unificata a un insieme di interfacce in un sottosistema. Essa definisce un'interfaccia di alto livello che semplifica l'uso del sottosistema, senza entrare nella sua struttura interna.

Gli obiettivi principali della facciata:

  • Semplificazione: Nasconde la complessità del sottosistema dietro un'interfaccia semplice.
  • Riduzione dell'accoppiamento: Il codice cliente interagisce solo con la facciata, non direttamente con i componenti del sottosistema.
  • Incapsulamento: Le modifiche alla struttura interna del sottosistema hanno meno impatto sul codice cliente che utilizza la facciata.

Esempio di utilizzo: Immagina un sistema complesso di elaborazione ordini in un negozio online, che include sottosistemi di inventario, pagamenti, spedizioni e notifiche. Invece di chiamare i metodi di ciascuno di questi sottosistemi separatamente, si può creare un OrderProcessor come facciata.

// Esempio di struttura senza facciata
// Il codice cliente diventa complesso
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);

// Esempio di struttura con facciata
public class OrderProcessorFacade {

    private InventorySystem inventorySystem;
    private PaymentSystem paymentSystem;
    private ShippingSystem shippingSystem;
    private NotificationSystem notificationSystem;

    public OrderProcessorFacade() {
        this.inventorySystem = new InventorySystem();
        this.paymentSystem = new PaymentSystem();
        this.shippingSystem = new ShippingSystem();
        this.notificationSystem = new NotificationSystem();
    }

    public void placeOrder(Item item, double amount, String address, String email) {
        // Verifica disponibilità
        inventorySystem.checkStock(item);

        // Elaborazione pagamento
        paymentSystem.processPayment(amount);

        // Organizzazione spedizione
        shippingSystem.arrangeShipping(address);

        // Invio notifica
        notificationSystem.sendConfirmation(email);

        // Logica aggiuntiva o gestione errori
    }
}

// Codice cliente con utilizzo della facciata
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);

// Per il cliente, l'interazione è notevolmente semplificata