Introdurre precocemente la complessità implementando modelli di progettazione prima che siano necessari non è una buona pratica.
Tuttavia, se segui tutti (o anche gran parte dei) principi SOLID e utilizzi modelli di progettazione comuni, introdurrai una certa complessità in quanto le funzionalità ei requisiti verranno aggiunti o modificati per mantenere il tuo progetto come mantenibile e flessibile a seconda delle necessità.
Tuttavia una volta che la complessità è stata introdotta e funziona come un campione quando lo hai rimosso?
Esempio. Ho un'applicazione scritta per un cliente. Quando originariamente creato là dove diversi modi per dare rilanci ai dipendenti. Ho usato il modello di strategia e la fabbrica per mantenere l'intero processo bello e pulito. Nel corso del 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 dare un aumento.
La complessità richiesta dal modello strategico non è più necessaria. Se dovessi codificare questo dai requisiti così come sono ora, non introdurrei questa complessità extra (ma assicurati di poterlo introdurre con poco o nessun lavoro in caso di necessità).
Quindi rimuovo l'implementazione della strategia ora? Non penso che questo nuovo proprietario cambierà mai il modo in cui vengono dati i rilanci. Ma l'applicazione stessa ha dimostrato che ciò potrebbe accadere.
Ovviamente questo è solo un esempio in un'applicazione in cui un nuovo proprietario prende il sopravvento e ha semplificato molti processi. Potrei rimuovere dozzine di classi, interfacce e fabbriche e rendere l'intera applicazione molto più semplice. Si noti che l'attuale implementazione funziona perfettamente e il proprietario ne è felice (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é è altamente probabile che il nuovo proprietario non mi userà più. Non mi interessa davvero che qualcun altro lo prenderà da quando non è stato un grande generatore di reddito.
Ma mi importa di 2 cose (correlate)
-
Mi interessa un po 'che il nuovo manutentore debba pensare un po' più duramente quando cerca di capire il codice. La complessità è complessità e non voglio far arrabbiare lo psicopalcoico che viene dopo di me.
-
Ma ancora di più mi preoccupo per un concorrente che vede questa complessità e pensa che ho appena implementato schemi di progettazione per riempire le mie ore di lavoro. Quindi diffondere questa voce per ferire i miei altri affari. (Ho sentito questo citato.)
...
In generale, la complessità precedentemente necessaria dovrebbe essere rimossa anche se funziona e c'è stata una necessità storicamente dimostrata per la complessità, ma non si ha alcuna indicazione che sarà necessaria in futuro?
Anche se alla domanda di cui sopra viene generalmente risposto "no" è opportuno rimuovere questa complessità "non necessaria" se si consegna il progetto a un concorrente (o straniero)?