In vielerlei Hinsicht mag ich die Idee von Fluent-Schnittstellen sehr, aber mit all den modernen Funktionen von C # (Initialisierer, Lambdas, benannte Parameter) denke ich: "Lohnt es sich?" Und "Ist dies das richtige Muster für" verwenden?". Könnte mir jemand, wenn nicht eine akzeptierte Praxis, zumindest seine eigene Erfahrung oder Entscheidungsgrundlage für die Verwendung des Fließenden Musters geben?
Fazit:
Einige gute Faustregeln aus den bisherigen Antworten:
- Fließende Interfaces helfen sehr, wenn Sie mehr Aktionen als Setter haben, da Anrufe mehr vom Kontextdurchgang profitieren.
- Fließende Interfaces sollten als eine Schicht über einer API betrachtet werden, nicht als das einzige Mittel zur Verwendung.
- Die modernen Funktionen wie Lambdas, Initialisierer und benannte Parameter können Hand in Hand arbeiten, um eine flüssige Benutzeroberfläche noch benutzerfreundlicher zu gestalten.
Hier ist ein Beispiel dafür, was ich mit den modernen Funktionen meine, die dafür sorgen, dass sie sich weniger gebraucht anfühlen. Nehmen Sie zum Beispiel ein (vielleicht schlechtes Beispiel) Fluent-Interface, mit dem ich einen Mitarbeiter wie folgt erstellen kann:
Employees.CreateNew().WithFirstName("Peter")
.WithLastName("Gibbons")
.WithManager()
.WithFirstName("Bill")
.WithLastName("Lumbergh")
.WithTitle("Manager")
.WithDepartment("Y2K");
Könnte leicht mit Initialisierern geschrieben werden wie:
Employees.Add(new Employee()
{
FirstName = "Peter",
LastName = "Gibbons",
Manager = new Employee()
{
FirstName = "Bill",
LastName = "Lumbergh",
Title = "Manager",
Department = "Y2K"
}
});
In diesem Beispiel hätte ich auch benannte Parameter in den Konstruktoren verwenden können.