Qual è il modo più conveniente per rendere il codice legacy conforme al "principio di prossimità"?

2

Nella pagina 242 di Codice completo 2 , tout court di Steve McConnell Il principio di prossimità .
In parole semplici, McConnell consiglia ai programmatori di mantenere insieme le azioni correlate .

Nel mio caso, l'enfasi applicabile è:

  • È importante inizializzare e impostare le variabili (e gli oggetti) vicino a dove vengono utilizzati.

Di solito è facile rispettare "Il principio della prossimità" quando lavori all'interno di un singolo blocco di codice o corpo del metodo; ma cosa succede se stai lavorando con codice legacy e un oggetto in cima allo stack è impostato o mutato in profondità nello stack? Per rendere le cose più complicate, cosa succede se quell'oggetto è impostato, mutato o referenziato più volte all'interno dello stack?

Quindi, ecco la mia domanda:

What is the Most Expedient Way to Make Legacy Code Conform to 'The Principle of Proximity'?

Per inciso, sto lavorando con Visual Studio 2010 e Resharper 5.
Ci sono trucchi IDE che potrebbero aiutarmi?

    
posta Jim G. 21.04.2011 - 18:02
fonte

3 risposte

2

Fai una domanda molto generale. Ci sono molte tecniche. Dici che (correttamente) è facile "quando lavori all'interno di un singolo blocco di codice o di un corpo del metodo" - e questa è la direzione in cui vuoi orientare il tuo codice. Per cominciare, evidenzia una variabile (presumo che VS evidenzi tutte le occorrenze e sperando che mostrerà non solo la variabile nel codice, ma anche i marcatori a fianco in modo da avere una buona idea di dove siano tutte le occorrenze). Le occorrenze sono raggruppate? Il codice usa davvero il valore assegnato alla fine di un cluster, nel prossimo cluster - o riassegna il valore, semplicemente riutilizzando una variabile per eccesso di spazio? Se è il secondo, usa una nuova variabile in ogni cluster, dichiarandola e inizializzandola solo dove è necessaria.

Cerca nomi come "temp" e "tmpXxx" - sono dei buoni candidati per questo tipo di trattamento, poiché alcuni sviluppatori sembrano pensare che ci sia un risparmio in termini di riproposizione delle variabili in questo modo. Hanno torto.

Metodo di estrazione è tuo amico. Se non puoi estrarre un metodo (forse perché vengono assegnati più locals), ricorri su Converti variabile locale in campo . Potrebbe rivelarsi una conversione provvisoria, eseguita per facilitare Metodo di estrazione e successivamente annullata. Oppure potrebbe essere che la variabile dovrebbe essere un campo e la tua classe è più pulita in questo modo.

Classe Sprout è anche buona, per grandi e amp; piccole sezioni di codice simili. Ovunque (prendendo in prestito la terminologia di Feathers) puoi introdurre una cucitura - tra metodi, tra classi, ecc. - è un buon posto per migliorare la località.

    
risposta data 21.04.2011 - 18:32
fonte
4

Il modo più efficiente sarebbe probabilmente acquistare il libro Funzionante in modo efficace con il codice legacy e leggere il capitolo pertinente. È uno dei libri di programmazione più utili che ho letto. Non posso raccomandarlo abbastanza.

    
risposta data 21.04.2011 - 18:04
fonte
1

Vale la pena dare un'occhiata al recente video blog di UncleBob sulle funzioni di grandi dimensioni in cui le classi vanno a nascondersi linky dove parla di una grande funzione avente blocchi di funzionalità e portata variabile che comunicano tra loro, e come questa sia praticamente la definizione di una classe. Penso che ci sia qualcosa in più nell'episodio delle funzioni sul suo nuovo coder pulito sito

    
risposta data 08.06.2011 - 19:04
fonte