Em muitos aspectos, eu realmente gosto da idéia de interfaces Fluent, mas com todos os recursos modernos de C # (inicializadores, lambdas, parâmetros nomeados), eu me pego pensando: "vale a pena?" E "Esse é o padrão certo para usar?". Alguém poderia me dar, se não uma prática aceita, pelo menos sua própria experiência ou matriz de decisão sobre quando usar o padrão Fluente?
Conclusão:
Algumas boas regras práticas das respostas até agora:
- As interfaces fluentes ajudam muito quando você tem mais ações do que setters, pois as chamadas se beneficiam mais com a passagem do contexto.
- As interfaces fluentes devem ser pensadas como uma camada sobre uma API, não o único meio de uso.
- Os recursos modernos, como lambdas, inicializadores e parâmetros nomeados, podem trabalhar lado a lado para tornar uma interface fluente ainda mais amigável.
Aqui está um exemplo do que quero dizer com os recursos modernos, tornando-o menos necessário. Tomemos, por exemplo, uma interface fluente (talvez um exemplo ruim) que me permita criar um Funcionário como:
Employees.CreateNew().WithFirstName("Peter")
.WithLastName("Gibbons")
.WithManager()
.WithFirstName("Bill")
.WithLastName("Lumbergh")
.WithTitle("Manager")
.WithDepartment("Y2K");
Pode ser facilmente escrito com inicializadores como:
Employees.Add(new Employee()
{
FirstName = "Peter",
LastName = "Gibbons",
Manager = new Employee()
{
FirstName = "Bill",
LastName = "Lumbergh",
Title = "Manager",
Department = "Y2K"
}
});
Eu também poderia ter usado parâmetros nomeados nos construtores neste exemplo.