Prima di tutto scusa i miei errori in inglese; non è la mia lingua madre. In secondo luogo, non sono riuscito a trovare un titolo migliore per riassumere la mia richiesta, quindi lascia che ti spieghi di seguito:
Diciamo che abbiamo un software che fattura alcuni prodotti. Il processo di fatturazione dipende in larga misura dalla legislazione vigente. Ad esempio, la legge attuale potrebbe richiedere che quando si crea una fattura per un cliente, è obbligatorio avere l'indirizzo del cliente pieno. Tuttavia, la legge dovrebbe cambiare, così che dopo il 01-01-2018, quando fatturate un prodotto, dovete riempire le informazioni di altri clienti. Questo cambiamento potrebbe essere valido fino a quando, diciamo, 05-05-2018. Dopo questa data, la legge cambierà di nuovo. Tuttavia, il software deve essere compatibile con le versioni precedenti, il che significa che dopo il 05-05-2018 dovresti essere ancora in grado di creare fatture basate sui requisiti di legge dal 2017 e così via.
Ovviamente, non posso aggiungere una pila di istruzioni if-elseif-else in base alla data corrente perché ciò non rispetterà il "Principio Open-Close". Quale potrebbe essere una corretta progettazione tale che l'applicazione sarà aperta per essere estesa, ma chiusa per le modifiche?