2015-04-21 10 views
6

HINWEIS: Alle Builder sind nur für Komponententests vorgesehen.Welche ist effektiver beim Bau von Bauarbeitern?

So habe ich Builder erstellt und als ich sie erstellt habe, habe ich festgestellt, dass einige der anderen Bauherren, bereits an ihrem Platz, ein bisschen ein anderes Muster folgen.

Dachte ich frage hier welcher effektiver ist.

Mein Weg, es zu tun, ist dies:

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

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

Der andere Weg, der an seinem Platz ist:

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

Meiner Meinung nach dem ersten ist effektiver, weil Sie gerade Ihre Erbauer erstellen und Es übernimmt automatisch die Standardeinstellung für Sie.

Im anderen Fall müssen Sie explizit die WithDefaults-Methode aufrufen, um alle Standardwerte festzulegen, bevor Sie mit der Erstellung fortfahren.

Der zweite scheint fehleranfälliger zu sein, da einige Objekte, die erstellt werden müssen, Null-Ausnahmen auslösen können, wenn sie nicht alle ihre Felder eingerichtet haben.

Vielleicht vermisse ich hier etwas Subtiles, also habe ich mich entschieden, dich zu fragen, welches effektiver ist.

Vielen Dank.

+5

Wenn Sie "WithDefaults" aufrufen müssen, sind sie nicht wirklich defaults, oder? –

+0

@JonSkeet das ist ein toller Punkt, danke! – AvetisG

+0

Nun, wenn ich wirklich einen Profi für die zweite Methode finden wollte, wäre es dieser: WithDefault könnte immer noch verwendet werden, um die Builder-Attribute auf ihre Standardwerte zurückzusetzen .... – Sidewinder94

Antwort

0

Ich möchte eine dritte Option vorschlagen. Da der Builder den Umfang des Testcodes verringern soll, indem er die Initialisierung des Objekts auf eindeutige und sinnvolle Weise löscht - warum sollten Sie die Standardeinstellungen verwenden? In seinem eigenen sagt nichts über, was die tatsächlichen Standardwerte sind und Sie haben das Risiko des Testautors zu vergessen, "WithDefaults" zu nennen.

Werfen Sie einen Blick auf this post for example on how it's done

Statt den Konstruktor verwenden, um die Standardwerte (von Feldern speichert sie) und sie nur dann, wenn ausdrücklich gefragt ändern. Auf diese Weise erhalten Sie ein initialisiertes Objekt mit minimalen und sinnvollen Builder-Aufrufen.

Verwandte Themen