Situazione: recentemente ho aderito a un nuovo progetto e ho subito notato che il team è molto interessato a mantenere il codice "flessibile". Sembra che per ogni classe o funzione, non vogliono impedire agli utenti di questo framework di utilizzare le cose "come vogliono". In quanto tale, il team vuole fornire diversi modi per fare la stessa cosa.
Esempio: una classe richiede che l'utente fornisca una funzione di callback render
. La classe ha una funzione per accettare un'interfaccia o una funzione libera e una terza funzione template che accetta una funzione object e pointer-to-member. Un'altra classe ripete questo modello e ha funzioni di tipo ~ 13 render
-type e altre funzioni di use
sospette e così via.
Questa filosofia è duplicata attraverso il resto del codice. Molte classi hanno più modi di fare la stessa cosa "per la tua convenienza". La logica è "non vogliamo fare un lavoro extra per l'utente per costringerli a conformarsi".
La mia risposta: questa è una pessima filosofia con effetti negativi tangibili.
- Duplicazione codice / responsabilità a bizzeffe
- Bugs. Posso vederli arrivare. Ne ho già trovati alcuni a causa della duplicazione.
- Confusione per i nuovi utenti. Perché ci sono 13 funzioni di rendering leggermente diverse? Sono così la stessa cosa? Qual è lo scopo dell'utilizzo di questo contro quello?
- Confusione con gli sviluppatori futuri - gli stessi motivi di cui sopra.
- Difficile da mantenere - la modifica della funzione
render
significa in realtà la modifica di più% funzioni% -type di tipo. - Il design richiede troppo tempo. Abbiamo trascorso settimane su un singolo grafico UML di ~ 15 quadrati perché mantenere tutto "flessibile" rende le cose confuse e poco chiare. Spesso "Ma se dovesse essere necessario?" o "Capisco, ma quando dovremmo effettivamente usare questo?"
- I miei generali sensi di colpa mi dicono di essere inorridito.
Domanda: ho ragione nel sostenere che questa filosofia "flessibile" è un pessimo design? Se è così, come dovrei convincerli che fare render
di modi diversi per fare ogni potenziale compito non sta facendo all'utente alcun favore e sta solo rendendo il codice, in così tante parole, cattivo?