Introdurre prematuramente la complessità implementando modelli di progettazione prima che siano necessari non è una buona pratica.
Ma se segui tutti (o anche la maggior parte) dei principi SOLID e usi modelli di progettazione comuni, introducerai una certa complessità man mano che le caratteristiche e i requisiti vengono aggiunti o modificati per mantenere il tuo design mantenibile e flessibile, se necessario.
Tuttavia, una volta che la complessità è stata introdotta e funziona come un campione, quando è stata rimossa?
Esempio. Ho una domanda scritta per un cliente. Quando originariamente creato lì dove diversi modi per dare rilanci ai dipendenti. Ho usato il modello strategico e la fabbrica per mantenere l'intero processo bello e pulito. Nel tempo alcuni metodi di aumento sono stati aggiunti o rimossi dal proprietario dell'applicazione.
Il tempo passa e il nuovo proprietario prende il sopravvento. Questo nuovo proprietario ha un naso duro, mantiene tutto semplice e ha un solo modo per rilanciare.
La complessità richiesta dal modello di strategia non è più necessaria. Se dovessi codificarlo dai requisiti così come sono ora, non introdurrei questa complessità aggiuntiva (ma assicurerei di poterlo introdurre con poco o nessun lavoro in caso di necessità).
Quindi rimuovo l'implementazione della strategia ora? Non credo che questo nuovo proprietario cambierà mai il modo in cui vengono dati i rilanci. Ma l'applicazione stessa ha dimostrato che ciò potrebbe accadere.
Naturalmente questo è solo un esempio in un'applicazione in cui un nuovo proprietario prende il controllo e ha semplificato molti processi. Potrei rimuovere decine di classi, interfacce e fabbriche e rendere l'intera applicazione molto più semplice. Si noti che l'implementazione attuale funziona perfettamente e il proprietario ne è contento (e sorpreso e ancora più felice di essere stato in grado di implementare le sue modifiche così rapidamente a causa della complessità discussa).
Ammetto che una piccola parte di questo dubbio è perché è molto probabile che il nuovo proprietario non mi userà più. Non mi interessa davvero che qualcun altro lo prenda in carico poiché non è stato un grande generatore di reddito.
Ma mi importa di 2 cose (correlate)
Mi preoccupo un po 'che il nuovo manutentore dovrà pensare un po' di più quando cerca di capire il codice. La complessità è complessità e non voglio far arrabbiare il maniaco psicopatico che mi insegue.
Ma ancora di più mi preoccupo per un concorrente che vede questa complessità e pensa di implementare modelli di progettazione per riempire le mie ore di lavoro. Quindi diffondere questa voce per ferire gli altri miei affari. (Ne ho sentito parlare.)
Così...
In generale, la complessità precedentemente necessaria dovrebbe essere rimossa anche se funziona e c'è stata una necessità storicamente dimostrata per la complessità, ma non hai alcuna indicazione che sarà necessaria in futuro?
Anche se alla domanda sopra viene generalmente risposto "no" è saggio rimuovere questa complessità "non necessaria" se si passa il progetto a un concorrente (o straniero)?