2015-04-21 19 views
6

NOTA: tutti i builder sono solo per test unitari.Quale è più efficace quando costruisci i costruttori?

Così ho creato i costruttori e, mentre li sto creando, ho iniziato a notare che alcuni degli altri costruttori, già presenti, seguono un modello un po 'diverso.

Pensiero chiedo qui quale è più efficace.

mio modo di fare è questo:

public class Builder 
{ 
    public Builders() 
    { 
     SetDefaults(); 
    } 

    private void SetDefaults() 
    { 
     // Setting my defaults 
    } 
} 

L'altro modo che è a posto:

public class Builder 
{  
    public Builder WithDefaults() 
    { 
     // Setting my defaults 
    } 
} 

A mio parere il primo è più efficace perché basta creare il vostro costruttore e fa automaticamente l'impostazione predefinita.

Nell'altro caso, è necessario chiamare esplicitamente il metodo WithDefaults per impostare tutti i valori predefiniti prima di procedere alla sua creazione.

Il secondo sembra più soggetto a errori poiché alcuni oggetti che devono essere compilati possono generare eccezioni null se non hanno tutti i campi impostati.

Forse mi manca qualcosa di sottile qui così ho deciso di chiederti quale è più efficace andare avanti.

Grazie.

+5

Se devi chiamare "WithDefaults" non sono realmente predefiniti, vero? –

+0

@JonSkeet è un ottimo punto, grazie! – AvetisG

+0

Beh, se davvero volessi trovare un professionista per il secondo metodo, sarebbe questo: WithDefault potrebbe ancora essere usato per ripristinare gli attributi del builder ai loro valori predefiniti .... – Sidewinder94

risposta

0

Vorrei proporre una terza opzione. Poiché il builder dovrebbe ridurre la quantità di codice di test rimuovendo l'inizializzazione degli oggetti in modo chiaro e significativo, perché dichiarare di utilizzare i valori predefiniti? Nel proprio è non dice nulla su quali sono le impostazioni predefinite effettive e si ha il rischio che il test writer si dimentichi di chiamare "WithDefaults".

Date un'occhiata a this post for example on how it's done

invece utilizzare il costruttore per impostare i valori di default (di campi di stoccaggio loro) e di modificarle solo se esplicitamente chiesto di. In questo modo si ottiene un oggetto inizializzato con chiamate di costruttore minime e significative.

Problemi correlati