TOP

Cos'è il refactoring?

Descrizione

Refactoring (Refactoring) – modifiche apportate alla struttura interna del software (software) per renderlo più facile da comprendere e più veloce da modificare senza modificare il comportamento esterno. Inoltre, si tratta di una ristrutturazione del software attraverso l'applicazione di una sequenza di refactoring senza modificare il comportamento esterno del software.


Vantaggi del refactoring:

Quando è necessario eseguire il refactoring:

Cattivi odori nel codice (Smells Catalog) :

Possibili opzioni di refactoring

  1. Moving Features Between Objects (Trasferimento del codice completo tra oggetti):

    • Move Method (Evidenziazione del metodo) – isolare un metodo separato se il metodo è troppo lungo o contiene il codice che richiede commenti.
    • Move Field (Campo in movimento) - eseguito quando il campo viene utilizzato da un'altra classe più spesso rispetto a dove è definito.
  2. Organizing Data (Disposizione delle date):

    • Encapsulate Field (Incapsulamento del campo) - Uno dei principi fondamentali dell'OOP è l'incapsulamento o l'occultamento dei dati. Rendendo pubblici i dati, gli oggetti possono leggerne e modificarne i valori all'insaputa del proprietario dei dati. Pertanto chiudiamo questo campo e forniamo le modalità di accesso.
    • Encapsulate Collection (Incapsulamento della raccolta) - spesso l'aula contiene una raccolta di esemplari. Questa raccolta può essere una matrice, una lista, un insieme o un vettore. Il metodo getter non dovrebbe restituire l'oggetto della collezione stessa, poiché consentirebbe al client di modificare il contenuto della collezione senza la classe che possiede. È quindi necessario rendere il valore restituito dal metodo sola lettura e creare metodi per aggiungere/rimuovere elementi.
  3. Composing Methods (Estrazione e combinazione del codice):

    • Extract Method (Evidenziazione del metodo) – se c’è una parte di codice che può essere raggruppata, inserirla in un metodo separato con un nome che non ne spieghi lo scopo. Pertanto, il nome del metodo sostituirà i commenti.
    • Inline Method (Modalità di incorporazione) – a volte è utile spostare il corpo di un metodo nel codice che lo chiama. A volte i corpi dei metodi sono autoesplicativi quanto il nome stesso del metodo. Potrebbe anche verificarsi una situazione in cui esistono molti metodi diversi, la cui struttura non ha successo, e quindi è meglio inserirli tutti in un metodo generale e quindi separare i metodi in un altro modo.
    • Inline Temp (Inserimento di una variabile temporanea) – sostituzione di una variabile temporanea a cui è assegnata un'espressione semplice una sola volta. A volte la variabile interferisce con altri refactoring.
    • Replace Temp with Query (Sostituzione di una variabile temporanea con una chiamata al metodo) – si utilizza quando si utilizza una variabile temporanea per memorizzare il valore di un'espressione. In questo caso, sostituiamo l'espressione con un metodo e sostituiamo tutti i riferimenti nel codice a questa variabile con il nuovo metodo.
    • Split Temporary Variable (Dividi una variabile temporanea) – si applica quando una singola variabile temporanea viene utilizzata per assegnare più volte risultati diversi (a meno che non si tratti di una variabile utilizzata in un ciclo interno e non sia una variabile per accumulare il risultato). In questo caso, creiamo una variabile separata per ogni assegnazione.
  4. Simplifying Conditional Expressions (Semplificando le espressioni con condizioni):

    • Decompose Conditional (Composizione dell'operatore condizionale) – eseguito quando abbiamo una catena di controlli condizionali (if-then-else). Sostituiamo la condizione (if), parti di then e else con metodi separati. Contribuisce a comprendere meglio il motivo della ramificazione e i nomi dei metodi chiariscono lo scopo della parte corrispondente del codice.
    • Consolidate Conditional Expression (Consolidamento dell'espressione condizionale) - viene eseguito se sono presenti più controlli che danno lo stesso risultato. È necessario combinare tutti i controlli in un'unica espressione o metodo condizionale.
    • Consolidate Duplicate Conditional Frammenti (consolidamento di frammenti duplicativi condizionali) – lo stesso frammento è presente in tutti i rami dell’espressione condional. Devi spostare questo pezzo di codice all'esterno di questa espressione.
    • Remove Control Flag (Rimuovere la bandiera di controllo) – esiste una variabile che funziona come flag di controllo per una serie di espressioni logiche. Usiamo invece BREAK o RETURN.
    • Replace Conditional with Polymorphism (Sostituendo l'operatore condizionale con il polimorfismo) – viene eseguito quando è presente un operatore, il cui comportamento dipende dal tipo di oggetto. È necessario spostare ogni ramo dell'operatore condizionale in un metodo sovraccaricato della sottoclasse. Rendi astratto il codice sorgente.