Sono un po 'confuso su come il principio di Open Closed possa essere applicato nella vita reale. Il requisito in qualsiasi azienda cambia nel tempo. Secondo il principio di Open-Closed si dovrebbe estendere la classe invece di modificare la classe esistente. Per me, estendere una classe non sembra essere pratico per soddisfare il requisito. Lasciatemi fare un esempio con il sistema di prenotazione dei treni.
Nel sistema di prenotazione dei treni ci sarà un oggetto Ticket. Ci possono essere diversi tipi di biglietti Biglietto normale, Biglietto di concessione, ecc. Il biglietto è di classe astratta e RegularTicket e ConcessionTickets sono lezioni concrete. Poiché tutti i biglietti avranno il metodo PrintTicket che è comune, quindi è scritto in Ticket che è una classe astratta di base. Diciamo che ha funzionato bene per alcuni mesi. Ora arriva un nuovo requisito, che afferma di cambiare il formato del biglietto. Possono essere aggiunti altri campi sul biglietto stampato o il formato può essere modificato. Per soddisfare questo requisito ho le seguenti opzioni
- Modifica il metodo PrintTicket () nella classe astratta Ticket. Ma questo viola il principio Open-Closed.
- Sostituisci il metodo PrintTicket () nelle classi figlie, ma questo duplicherà la logica di stampa che è una violazione del principio DRY (Non ripeterti).
Quindi le domande sono
- Come posso soddisfare i requisiti aziendali di cui sopra senza violare il principio Open / Closed.
- Quando la classe dovrebbe essere chiusa per la modifica? Quali sono i criteri per considerare la classe chiusa per la modifica? È dopo l'implementazione iniziale della classe o potrebbe essere dopo la prima implementazione in produzione o potrebbe essere qualcos'altro.