Metodo doloroso Stupido Nomi in codice legacy: Risolto o lasciato come avvertimento? [duplicare]

7

Per questo caso assumiamo qualcosa come ... "removedNonPriceChangingConfermations" che non è in alcun modo relativo alle cose accadute al passato, né restituisce un elenco di elementi rimossi (che non avresti mai bisogno in questo contesto) .

Se non riesci a individuare l'altra cosa che non va, ti sfido a un concorso di spelling a posta alta.

Il dilemma:

È meglio rinominare il metodo in modo più accurato e meno doloroso per descrivere cosa effettivamente fa?

O dato che si trova all'interno di un ottovolante di classe 20 di fallimento (mappatura di una tabella interrogata in db su un bean) è meglio lasciarlo come una sorta di boa di avvertimento dell'unico menti che hanno elaborato il codice con commenti per spiegare cosa fa realmente alla definizione? Almeno fino a quando non siamo in grado di rifattorizzare correttamente la cosa sciocca.

Se rilevante, ipotizza un alto tasso di turnover ma sempre buone intenzioni.

Nota: non è difficile cambiare il nome del metodo. Questa domanda riguarda in generale se non è meglio lasciare intatto un nome di metodo veramente stupido, in modo che le persone possano vedere che stanno camminando in "una di quelle parti" della base di codice o se dovrei in realtà cambiarlo in meglio riflettere ciò che effettivamente fa.

    
posta Erik Reppen 09.07.2013 - 21:38
fonte

6 risposte

3

È utile come segnale di pericolo? Non proprio. Semplicemente confonderà le persone e sarà difficile da ricordare.

Una funzione ben denominata che dice a qualcuno che non sa cosa sia effettivamente il codice peloso in realtà è molto utile. Il codice cattivo o confuso, che implicitamente è nella funzione, può essere orribile per risolvere il problema. Se lo hai fatto e puoi dare una buona descrizione della funzione nel nome, hai reso il lavoro del programmatore successivo molto più semplice.

Anche commentare ciò che fa è utile, ma i commenti non vengono sempre letti, ma il nome della funzione è.

Le finestre rotte dovrebbero sempre essere corrette. Non fissare il nome lascerà una finestra rotta e incoraggerà il programmatore successivo a non iniziare il re-factoring.

    
risposta data 10.07.2013 - 02:42
fonte
17
  • Grep l'intero codice base per il nome del metodo. Scopri come è pubblico, quante configurazioni lo menzionano, ecc.

  • Rinomina il metodo senza pietà (un buon IDE può farlo), grep di nuovo, aggiorna manualmente tutti i riferimenti che l'IDE ha mancato. Aggiungi un commento che spieghi le peculiarità del metodo, se ce ne sono.

  • Se il metodo non è pubblico (ha solo visibilità del pacchetto o più ristretto), hai finito!

  • Se il metodo è in qualche modo pubblico (esposto a terze parti o ha solo visibilità pubblica senza una ragione apparente), crea un metodo con il vecchio nome che chiama il metodo appena rinominato e logs il fatto. In questo modo scoprirai quali sono gli altri client di questo metodo. Se questi sono sotto il tuo controllo, alla fine fagli usare il nuovo nome.

  • Esegui test. Se non hai un test per quel metodo, o per alcuni dei suoi clienti, è un buon momento per aggiungerli.

risposta data 09.07.2013 - 22:22
fonte
3

Rifattalo, ma crea prima un hardprint. Inquadralo. E mettilo su una sala della fama di vergogna.

    
risposta data 09.07.2013 - 22:22
fonte
1

Come mi avvicinerei a questo:

Se in qualche momento il refactoring si verificherà, lo lascerei come con un commento.

Se viene chiamato solo in alcuni punti e ha una buona copertura di prova, lo cambierei.

Se nessuna di queste situazioni si applica ma ti tiene sveglio la notte, lo cambierei.

Altrimenti, passa a qualcosa di più importante.

    
risposta data 09.07.2013 - 21:51
fonte
0

Probabilmente lo aggiusterò, specialmente se avessi del lavoro da fare in quell'area ... Non c'è bisogno di lasciare il codice cattivo in giro. Esempi di nomi validi sono esempi di brutti nomi.

Tuttavia, alcune cose che potrebbero influenzare questa decisione sono se posso testarlo per conseguenze indesiderate. Soprattutto se è pubblico e da un'interfaccia in codice legacy.

Mi sono imbattuto in questo oggi, in effetti, in un metodo pubblico e in un'interfaccia, che non sembrava essere referenziato da nessuna parte, finché non ho eseguito l'applicazione e scoperto un framework legacy nella nostra app che è configurata con i nomi dei metodi in XML usato.

Se non potessi confermare che le cose funzionassero ancora correttamente dopo il cambiamento, probabilmente lo avrei lasciato fermentare.

    
risposta data 09.07.2013 - 22:12
fonte
0

Lo aggiusterei. La domanda inferisce Java, ma io codifico in C # per vivere e possiedo una copia di ReSharper, e quindi cambiare il nome di un membro di codice, da un campo privato fino alla radice dello spazio dei nomi, è piuttosto semplice; destra-click- > Refactor- > Rinomina. Quindi, lo faccio, perché è davvero così semplice (il 99% delle volte, se sto lavorando in librerie condivise tra codebase distinte, potrei essere più cauto poiché un bel po 'del nostro codice legacy non ha build automatizzata in TeamCity).

Non so che tipo di strumenti lungo queste linee siano disponibili per Eclipse, ma JetBrains scrive anche IntelliJ IDEA che ha molti di questi tipi di operazioni di refact incorporate direttamente dentro.

    
risposta data 10.07.2013 - 03:55
fonte

Leggi altre domande sui tag