Quanto è utile il riutilizzo del codice linea per linea?

1

Nel mio posto di lavoro, il cliente è ossessionato dal riutilizzo del codice linea per linea. E usano uno strumento che usa LoC come misura della riutilizzabilità del codice.

Spesso per due moduli, se la logica è la stessa al momento , quei moduli chiamano lo stesso metodo. Che riduce n. di linee, ma sembra un disastro gestibile a lungo termine.

I miei dubbi sono validi? O mi manca qualcosa qui?

Non un duplicato di questa domanda , sono preoccupato per la semplice misura basata su LoC. Capisco scomposizione in componenti più piccoli, ma non è così.

    
posta Arumoy Chakraborty 19.07.2017 - 13:57
fonte

2 risposte

5

Il riutilizzo del codice e il conteggio delle righe di codice (LoC) sono ossessioni diverse.

Entrambe le cose sono sensibili a. Nessuna delle due dovrebbe essere la preoccupazione principale.

Buoni nomi, leggibilità, semantica, organizzazione, astrazione. Prenderò uno di quelli su questi altri due.

Il riutilizzo del codice è molto buono da applicare quando ti trovi a ramificare ogni caso possibile nella sua sezione di codice quasi identico. Separa ciò che varia da ciò che rimane lo stesso. Stuff decisioni in variabili. Il riutilizzo del codice non è così buono se ogni volta che scrivi una riga di codice ti viene richiesto di cercare nel codice di base per essere sicuro che non ci sia una linea identica in altre. Il riutilizzo del codice è molto più una cosa concettuale che una cosa meccanica. Sarei diffidente nei confronti degli strumenti che hanno cercato di fare questo lavoro per me.

Le linee di codice sono un problema di fondo della barricata. Puoi fare alcune cose buone cercando di mantenere basse le linee di codice. Puoi fare cose orribili cercando di tenerli su. Ancora una volta questo sta ignorando l'esperienza di leggere il codice e concentrarsi su un aspetto meccanico. Preferisci semplicemente aggiungere funzionalità a linee di codice e dovresti trovare te stesso a mantenere metodi e classi piccoli.

In breve, invece di eseguire uno strumento, preferirei fare una revisione del codice afferrando un altro coder per 5 minuti e vedere da solo quanto di ciò che ho scritto sia comprensibile.

    
risposta data 19.07.2017 - 15:38
fonte
1

In realtà direi che in alcuni casi, potrebbe essere meglio non ossessionare il riutilizzo del codice e concentrarsi invece sulla scrittura del codice nel modo più semplice possibile. Troppe funzioni complesse come la sottoclasse, le interfacce astratte implementate ovunque, ecc. Significano che è quasi impossibile fare qualsiasi debugging utile. Anche la troppa astrazione può essere la causa dei problemi di prestazioni.

Veloce: qual è il vero tipo di dati dell'oggetto che hai e cosa fa quando chiami un particolare metodo? Il problema è che potresti non necessariamente saperlo. E nei casi in cui potresti saperlo, potrebbe essere necessario molto tempo per ottenere tali informazioni.

Se la soluzione naturale per un problema è un'interfaccia che si implementa, si prega di utilizzare le interfacce. Non metterli ovunque, tuttavia, solo per mantenere basso il numero di code line. La sottoclasse potrebbe essere a volte una soluzione naturale, ma il più delle volte si dovrebbe preferire la composizione sull'ereditarietà e le interfacce potrebbero essere un'idea migliore delle sottoclassi in cui tale regola non si applica.

Ho lavorato a un progetto in cui abbiamo implementato un servizio online piuttosto complesso utilizzando un codice semplice. Codice non condiviso-ovunque. Non cercare di mantenere basso il LoC. Semplice codice, e molto. Scrivere un nuovo codice era veloce: mentre un programmatore esperto può scrivere 1000 righe di codice complesso al mese, potremmo scrivere oltre 10000 righe di codice semplice al mese per sviluppatore. Il debug è stata una gioia totale. Puoi quasi sempre vedere che cosa fa un determinato pezzo di codice, perché non tutto è stato distrutto da un'interfaccia. Le query SQL sono state costruite manualmente, pertanto è possibile testare facilmente le loro prestazioni nel database e visualizzare il piano di query utilizzando EXPLAIN . Abbiamo condiviso il codice? Certo che lo abbiamo fatto, avevamo un codice condiviso, ma lo usavamo solo quando aveva senso, non tentando di mantenere il LoC abbassato a tutti i costi. Abbiamo anche utilizzato le librerie esterne ovunque avesse senso. Un sacco di volte, in realtà aveva senso implementare la funzionalità da soli invece di scegliere una libreria esterna per un lavoro da 100-LoC.

Suggerirei che se si desidera mantenere basso il LoC, è necessario creare due misure: il LoC delle parti che sono state scritte e il LoC di tutto il software da cui dipende. Considera che c'è 1 bug per 100-10000 LoC (forse 1 bug per 100 LoC per codice complesso, 1 bug per 10000 LoC per codice semplice). Quindi, se hai due milioni di LoC in componenti esterni, quanti bug hai? Duecento? Duemila? Ventimila? Solo per il gusto di farlo, prova a vedere se il codice esterno è semplice o complesso guardandolo. Scommetto che è complesso, non semplice.

    
risposta data 19.07.2017 - 16:09
fonte

Leggi altre domande sui tag