Migliore risposta
Sì, scriverai gli stessi tipi, ricerche e funzioni di gestione delle stringhe migliaia di volte, ognuna solo una minima variazione dellultima volta.
Questo è così vero che una filosofia salvifica la sanità mentale che nega è sorta nel mondo accademico chiamata “Non ripetere te stesso” che finge che ci sia un modo per non scrivere lo stesso codice e oltre.
Questo stupido mantra ha davvero bisogno di essere sconfitto dalle persone.
Design intelligente significa non dover ricominciare da capo ogni volta e codifica intelligente significa sapere quando scrivere qualcosa nuovo e quando riutilizzare il codice.
Il riutilizzo del codice come misura che fa risparmiare tempo e che fa risparmiare debug ha i suoi vantaggi, quando è disponibile. Questo si è evoluto in strumenti utili come generici e modelli e il concetto di ereditarietà e API universali in modo che lordinamento e la ricerca diventino generici invece di richiedere una nuova funzione di ricerca da scrivere per ogni tipo di array o elenco.
La copia del testo del codice è considerata il peggior errore perché copia bug e codice gonfio ed è principalmente ciò che è considerato ridondante.
È qui che lereditarietà brilla come strategia di riduzione del codice. Non è necessario che le sottoclassi siano costose riscritture delle loro classi di base se la maggior parte delle funzionalità comuni a tutte le sottoclassi viene inserita nella classe di base. Molte volte la sottoclasse può chiamare la funzione della classe base e quindi eseguire da sola alcune alterazioni, piuttosto che reimplementare lintera funzione. Questo è ciò di cui stanno parlando.
Ma il “Dont Repeat Yourself” è diventato un cult in forum come questo come una sorta di modo ideale per programmare e progettare, e semplicemente non è vero o pratico o parte di qualsiasi corpo di codice del mondo reale.
Lover-design è per sviluppatori di linguaggi, teorici e creatori di Framework. I programmatori pratici scrivono semplicemente codice che funziona e se il tuo programma ha due classi che implementano entrambe la ricerca binaria, beh, allora. Hai davvero bisogno di una terza classe con sottoclassi per gestire le ricerche binarie per le altre due classi di dati? Forse, ma si tratta di aumentare una quantità di classi di dati con necessità di ricerca binaria, quindi diventa un vero e proprio risparmio di tempo e bug avere una classe che lo fa correttamente che può essere sottoclasse per gestire le esigenze delle classi di dati. Vedi?
La programmazione in grande richiede molta più pianificazione e analisi della divisione del lavoro rispetto alla programmazione di piccoli lavori e strumenti. Quindi sì, se hai un progetto con oltre 1000 righe di codice, controlla il design e trova algoritmi e funzioni ridondanti e decidi se puoi riunirli in una o due classi di utilità funzionali e condividere il codice per tutti gli oggetti dati. Ma non farne una ricerca religiosa per leliminazione definitiva della ridondanza. E non credere a chi lo fa.
Rispondi
Se è lopzione più efficiente, non è una cattiva pratica. Tuttavia, qualsiasi cosa che abbia una soluzione più semplice ed elegante prontamente disponibile, è una cattiva pratica .
In questo caso, un interruttore gigante può spesso essere sostituito da uninterfaccia o consentire a una classe di avere la propria responsabilità, ecc.
Ad esempio, se hai qualcosa di simile :
Questo funzionerà . Il codice sarà un po robusto fintanto che i valori vengono aggiunti e non modificati, e in realtà è anche abbastanza efficiente poiché i confronti dei bit richiedono praticamente zero tempo. Ma questo andrà fuori controllo, sarà difficile da navigare e tu già dovrai comunque definire queste classi di auto.
Invece, iniziamo con qualcosa del genere:
Di nuovo, probabilmente lo avevamo comunque, solo senza il metodo numberOfCylinders, e quindi ora il nostro primo il metodo ha questo aspetto:
Ora immagina per un momento di essere un negozio nazionale di ricambi per auto e abbiamo letteralmente migliaia di auto di varie marche, modelli, finiture, ecc. Che se / altro diventerebbe un mostro enorme, impossibile da leggere, estremamente difficile da aggiungere o rimuovere in sicurezza, ecc.
Quindi di nuovo , non è sempre una cattiva pratica e a volte avremo bisogno di un grosso interruttore o qualcosa del genere, ma di solito cè un modo più semplice per nascondersi.
EDIT: Ci sono molti commenti sullavere un n numero estremamente elevato di combinazioni di auto (potenzialmente milioni nella storia) e classi che implementano Car failing qui. Ovviamente, a un certo punto, le classi non funzioneranno e memorizzerai file flat in un database e utilizzeresti una funzione di accesso.
La mia risposta aveva lo scopo di mostrare il trabocchetto delluso di molto tempo istruzioni condizionali, non come un tentativo effettivo di costruire unarchitettura di un negozio di ricambi auto.Se lavori presso un importante rivenditore di auto, non prendere la mia semplice risposta come base della tua architettura software 🙂