L'estrazione di parti di logica per migliorare o ridurre la leggibilità del codice?

2

Se c'è un codice che deve essere implementato su più controller (diciamo, 10), ad esempio:

// Inside a controller function

var myField = null;
var response = service.callBackend(function(){

    // Other logic

    // starts here
    if (response) {
        myField = { 
             name: response.name,
             value: response.val,
             access: access.READ,
        };
    };
    // ends here

    // Other logic

});

Qual è un approccio migliore? Per creare un myField in ogni controller come un oggetto con il controllo di response o estrarre la logica in una funzione separata?

function helper() {
    return {
        createReadonlyField: function(content) {
            if (!content)
                return null;

            return {
                name: content.name,
                value: content.val,
                access: access.READ
            };
        }
    };    
};

E poi in ogni controller chiameresti la funzione helper per costruire il campo:

// Inside a controller function (helper object is passed as Dependency Injection)

var myField = null;
var response = service.callBackend(function(){

    // Other logic

    myField = helper.createReadonlyField(response);

    // Other logic

});

La leggibilità del codice è ridotta estraendola a una funzione?

    
posta mimo 25.07.2016 - 22:44
fonte

1 risposta

3

Diversi commenti:

  1. Hai creato un helper di chiusura per creare un oggetto relativamente semplice, in modo da poter utilizzare una funzione semplice anziché una chiusura. Quando si utilizza un costrutto sostanzialmente più complesso del necessario, si chiede al lettore perché, e questo aggiunge confusione. La seguente funzione fa lo stesso senza la chiusura.

        function createReadonlyField (content) {
            if (!content)
                return null;
    
            return {
                name: content.name,
                value: content.val,
                access: access.READ
            };
        }
    

Tuttavia, apprezzo che tu possa davvero aver bisogno di una chiusura nel tuo codice reale, che l'esempio possa essere semplicemente semplificato per scopi di domanda.

  1. Generalmente parlando, l'estrazione di qualcosa a una funzione è utile perché puoi dargli un buon nome. Tuttavia, non è necessario soprattutto se lo si usa solo una volta. Estrarre definitivamente per funzionare se si utilizza più di una volta (tenerlo ASCIUTTO). E a volte anche se solo una volta, quando è relativamente isolato e merita il suo nome.

Soprattutto, devi guardare le astrazioni che stai creando per il cliente / utente / altri programmatori / te stesso. Una singola funzione di supporto è probabilmente troppo piccola come unità di astrazione.

Una buona astrazione è necessariamente una raccolta di funzionalità che funzionano insieme e possono nascondere i dettagli dell'implementazione, possono essere passate come entità e possono essere sostituite con un'implementazione alternativa.

Generalmente una singola funzione non può farlo, perché di solito devi sapere quali sono le altre funzioni per le altre capacità e non possiamo scambiarle tutte insieme. In questo modo, il cliente / utente deve conoscere meglio i dettagli sottostanti dell'astrazione per raggiungere le funzionalità mancanti.

    
risposta data 25.07.2016 - 23:44
fonte

Leggi altre domande sui tag