PRINCIPLES

O - Open/Closed Principle

Il codice dovrebbe essere aperto all'estensione ma chiuso alla modifica. Aggiungi nuove funzionalità senza modificare codice esistente.

Il Problema

Modificare codice esistente per aggiungere features rischia di introdurre bug. Ogni modifica richiede re-testing completo.

La Soluzione

Usare astrazioni (interfacce, classi astratte) per permettere estensioni tramite nuove implementazioni. Polimorfismo invece di if/else.

Struttura

Interfacce o classi base che definiscono contratti. Nuove features = nuove classi che implementano l'interfaccia.

Partecipanti:
Interfaccia/Classe astratta - contratto stabile
Implementazioni concrete - estensioni senza modifiche
Esempi di Codice

PROBLEMA: Violazione OCP

Ogni nuovo tipo di sconto richiede modifica del codice esistente. Rischio di bug.

JAVASCRIPT
Loading...

SOLUZIONE: Open/Closed (OCP)

Nuovi sconti = nuove classi. Codice esistente non toccato. Estensibile senza modifiche.

JAVASCRIPT
Loading...
Esempi nel Mondo Reale
Strategy pattern per algoritmi intercambiabili
Plugin systems (VS Code extensions)
Middleware chains (Express, Redux)
Event handlers (nuovi listener senza modifiche)
Quando Usarlo
Quando prevedi variazioni future (tipi di pagamento, sconti, formati)
Per sostituire if/else chains con polimorfismo
Plugin e sistemi estensibili
Quando NON Usarlo
Over-engineering se le variazioni sono improbabili