Devo eseguire il refactoring su o giù per il callstack?

2

Si dovrebbe fare un cambio di codice iniziando a refactoring con il "metodo entry-point" o il "metodo inner-most" di uno stack di chiamate?

Un collega e io stavamo parlando di un cambio di codice che avrebbe attraversato molti livelli di applicazione e toccato un certo numero di classi. L'obiettivo finale era assegnare una variabile a un nome di tabella SQL a livello di fornitore di dati. Ma la variabile dovrebbe essere configurata e toccata da molti altri livelli.

Abbiamo capito che abbiamo approcci opposti a questo tipo di refactoring. Mi piace iniziare dal punto di ingresso e lanciare "down", e preferisce fare prima il cambiamento finale e poi trovare gli usi di quel metodo più interno e continuare a spostare "su" il callstack.

Quali sono le considerazioni tra i due metodi? Qual è il più ottimale ed efficiente?

    
posta Clayton Rothschild 16.03.2017 - 16:40
fonte

2 risposte

5

La natura delle architetture stratificate è che, se eseguite correttamente, le dipendenze si spostano in una sola direzione. Ad esempio, in questo diagramma ...

Database --> ORM --> Business Logic --> Controller --> ViewModel --> View

... il Database non deve sapere nulla sull'ORM, che non deve sapere nulla sul Business Logic Layer, che non dovrebbe sapere nulla sul Controller, e così via.

Mi sembra che le modifiche dovessero avvenire da sinistra a destra, poiché l'ORM dipende dal database e il BLL dipende dall'ORM e così via.

    
risposta data 16.03.2017 - 17:18
fonte
1

stai lavorando con un linguaggio tipografico che è schizzinoso sulle firme dei metodi ed è in grado di verificarle in fase di compilazione, eseguire la modifica sul livello inferiore e scalare la pagina.

Il motivo è che quando si apporta una modifica all'interfaccia del livello del database, qualsiasi codice che utilizza tale interfaccia genera un errore del compilatore. La correzione di questi errori richiederà la modifica dell'interfaccia del codice chiamante, che provoca nuovamente errori nel livello superiore successivo e così via.

Devi solo continuare a seguire gli errori fino a quando l'intera base di codici non viene riparata.

Ma se dovessi lavorare con un linguaggio che può solo controllare le firme dei metodi (o anche l'esistenza del metodo) in fase di esecuzione (come JavaScript), ti consiglio di lavorare nella direzione opposta, perché è difficile determinare tutti i punti da cui verrà chiamato un determinato metodo.

    
risposta data 16.03.2017 - 17:24
fonte

Leggi altre domande sui tag