Recentemente sto leggendo un sito web sullo sviluppo del codice pulito (non inserisco qui un link perché non è in inglese).
Uno dei principi pubblicizzati da questo sito è il Open Closed Principle : ogni componente software dovrebbe essere aperto per l'estensione e chiuso per la modifica. Ad esempio, quando abbiamo implementato e testato una classe, dovremmo solo modificarla per correggere i bug o aggiungere nuove funzionalità (ad es. Nuovi metodi che non influenzano quelli esistenti). La funzionalità e l'implementazione esistenti non dovrebbero essere cambiate.
Normalmente applico questo principio definendo un'interfaccia I
e una corrispondente classe di implementazione A
. Quando la classe A
è diventata stabile (implementata e testata), di solito non la modifica troppo (forse, per niente), cioè
- Se arrivano nuovi requisiti (es. prestazioni, o un'implementazione completamente nuova dell'interfaccia) che richiedono grandi cambiamenti al codice, scrivo una nuova implementazione
B
, e continuo a usareA
finchéB
è non maturo. QuandoB
è maturo, tutto ciò che è necessario è cambiare il modo in cuiI
è istanziata. - Se i nuovi requisiti suggeriscono anche una modifica all'interfaccia, definisco una nuova interfaccia
I'
e una nuova implementazioneA'
. QuindiI
,A
sono congelati e rimangono l'implementazione per il sistema di produzione a condizione cheI'
eA'
non siano abbastanza stabili da sostituirli.
Quindi, in considerazione di queste osservazioni, mi ha un po 'sorpreso che la pagina web suggerisse l'uso di refactoring complessi , "... perché non è possibile scrivere codice direttamente nel suo modulo finale. "
Non c'è una contraddizione / conflitto tra l'applicazione del Principio Aperto / Chiuso e suggerire l'uso di refactoring complessi come best practice? Oppure l'idea è che si possono usare refactoring complessi durante lo sviluppo di una classe A
, ma quando tale classe è stata testata con successo dovrebbe essere congelata?