Java BuilderTestPattern - Wie vermeidet man Standardwerte?

8

Ich habe viele Wertobjekte in meinem Projekt.

Ich benutze Projekt lombok, um einige Textbausteine ​​zu entfernen, daher sehen meine Wertobjekte wie folgt aus:

%Vor%

Nicht schlecht, fast kein Boilerplate.

Und jetzt benutze ich den All-Args-Konstruktor ziemlich oft in meinen Tests. Es sieht ziemlich chaotisch aus, also dachte ich, ich werde stattdessen die Builder-Muster-Variante einführen:

%Vor%

und der Code sieht jetzt ganz nett aus:

%Vor%

Nun, das Problem ist - wie ich bereits erwähnte, ich muss viele ähnliche Klassen schreiben ... Ich bin schon müde mit dem Kopieren-Einfügen von ihnen.

Was ich suche, ist ein Black-Magic-Smart-Tool, das diesen Code irgendwie für mich generieren wird.

Ich weiß, es gibt eine @Builder Annotation in Lombok, aber sie erfüllt meine Anforderungen nicht. Hier ist warum:

1) Ich kann keine Standardwerte in Lomboks Builder angeben. Nun, eigentlich ist es möglich - indem ich die Builder-Klassenvorlage selbst implementiere wie

%Vor%

erzeugt auch einige Standardwerte.

2) Ich kann keine Möglichkeit finden, jedem Feldaccessor in Lomboks Builder einen Präfix hinzuzufügen. Vielleicht könnte @Wither hier helfen? Aber ich weiß nicht, wie man es richtig benutzt.

3) Der wichtigste Grund: Ich erschaffe keinen "natürlichen" Builder. Soweit ich es verstehe, ist Lombok entworfen, Builder für eine bestimmte, annotierte Klasse zu erstellen - ich weiß nicht, ob es eine Möglichkeit gibt, ein anderes Objekt aus build() Methode zurückzugeben.

Also, um es zusammenzufassen: Kennst du irgendein Werkzeug, das mir vielleicht helfen könnte? Oder sind all die Dinge, die ich erwähnt habe, tatsächlich mit Lombok möglich?

BEARBEITEN

Ok, also habe ich wahrscheinlich eine Lösung für diesen speziellen Fall gefunden. Mit Lombok können wir verwenden:

%Vor%

Prost, Slawek

    
slnowak 09.01.2015, 19:24
quelle

2 Antworten

5

Ich weiß, dass das alt ist, aber wenn jemand anderes dazu kommt, habe ich eine alternative Lösung gefunden, um Standardwerte für einen Builder bereitzustellen.

Überschreiben Sie die Builder-Methode und geben Sie die Standardwerte ein, bevor Sie einen Builder zurückgeben. Also im obigen Fall:

%Vor%

Es ist keine ideale Lösung, aber es muss bewerkstelligt werden, dass der gesamte Builder selbst überschrieben werden muss oder ein benutzerdefinierter Konstruktor (was bei vielen Variablen schmerzhaft ist). Es wäre trotzdem nett, etwas in der Art eines @With zu haben oder @Default Annotation, um dies zu behandeln.

    
mikea 20.05.2015 12:22
quelle
1

Probieren Sie Bob-the-builder für die Finsternis aus. Hmm .. Ich denke, das funktioniert am besten, wenn du Eclipse benutzt! Wenn Sie nicht mit Eclipse arbeiten, werden unten auf der Seite, die hier verlinkt ist, einige verwandte Projekte erwähnt, die nützlich sein können.

    
unigeek 09.01.2015 20:05
quelle