Java Language
Fließende Schnittstelle
Suche…
Bemerkungen
Tore
Das Hauptziel einer Fluent-Schnittstelle ist die Verbesserung der Lesbarkeit.
Bei der Verwendung zum Erstellen von Objekten können die für den Anrufer verfügbaren Auswahlmöglichkeiten klar festgelegt und durch Überprüfungen während der Kompilierungszeit durchgesetzt werden. Betrachten Sie zum Beispiel die folgende Optionsstruktur, die Schritte entlang des Pfads darstellt, um ein komplexes Objekt zu erstellen:
A -> B
-> C -> D -> Done
-> E -> Done
-> F -> Done.
-> G -> H -> I -> Done.
Mit einem Builder, der eine fließende Schnittstelle verwendet, kann der Anrufer leicht erkennen, welche Optionen bei jedem Schritt verfügbar sind. Zum Beispiel ist A -> B möglich, aber A -> C ist nicht und würde zu einem Kompilierungsfehler führen.
Wahrheit - Fließendes Test-Framework
Über "So verwenden Sie die Wahrheit" http://google.github.io/truth/
String string = "awesome";
assertThat(string).startsWith("awe");
assertWithMessage("Without me, it's just aweso").that(string).contains("me");
Iterable<Color> googleColors = googleLogo.getColors();
assertThat(googleColors)
.containsExactly(BLUE, RED, YELLOW, BLUE, GREEN, RED)
.inOrder();
Fließender Programmierstil
Im fließenden Programmierstil geben Sie this
von fließenden (Setter-) Methoden zurück, die nichts im nicht fließenden Programmierstil zurückgeben würden.
Dadurch können Sie die verschiedenen Methodenaufrufe verketten, wodurch Ihr Code für die Entwickler kürzer und einfacher zu handhaben ist.
Betrachten Sie diesen nicht fließenden Code:
public class Person {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String whoAreYou() {
return "I am " + firstName + " " + lastName;
}
public static void main(String[] args) {
Person person = new Person();
person.setFirstName("John");
person.setLastName("Doe");
System.out.println(person.whoAreYou());
}
}
Da die Setter-Methoden nichts zurückgeben, benötigen wir 4 Anweisungen in der main
, um eine Person
mit einigen Daten zu instanziieren und zu drucken. Mit einem fließenden Stil kann dieser Code folgendermaßen geändert werden:
public class Person {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public Person withFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public String getLastName() {
return lastName;
}
public Person withLastName(String lastName) {
this.lastName = lastName;
return this;
}
public String whoAreYou() {
return "I am " + firstName + " " + lastName;
}
public static void main(String[] args) {
System.out.println(new Person().withFirstName("John")
.withLastName("Doe").whoAreYou());
}
}
Die Idee ist, immer ein Objekt zurückzugeben, um die Erstellung einer Methodenaufrufkette zu ermöglichen und Methodennamen zu verwenden, die das natürliche Sprechen widerspiegeln. Dieser flüssige Stil macht den Code lesbarer.