Во многих отношениях мне действительно нравится идея интерфейсов Fluent, но со всеми современными функциями C # (инициализаторы, лямбды, именованные параметры) я думаю, «стоит ли это того?» И «Правильный ли это шаблон для использовать?». Может ли кто-нибудь дать мне, если не принятую практику, хотя бы свой собственный опыт или матрицу решений о том, когда использовать шаблон Fluent?
Заключение:
Некоторые хорошие правила из ответов на данный момент:
- Свободные интерфейсы очень помогают, когда вы выполняете больше действий, чем сеттеры, так как вызовы получают больше пользы от сквозной передачи контекста.
- Свободные интерфейсы следует рассматривать как слой поверх API, а не как единственный способ использования.
- Современные функции, такие как лямбда-выражения, инициализаторы и именованные параметры, могут работать рука об руку, чтобы сделать гибкий интерфейс еще более дружественным.
Вот пример того, что я имею в виду под современными функциями, заставляющими его чувствовать себя менее нужным. Возьмем, к примеру, (возможно, плохой пример) интерфейс Fluent, который позволяет мне создать сотрудника, например:
Employees.CreateNew().WithFirstName("Peter")
.WithLastName("Gibbons")
.WithManager()
.WithFirstName("Bill")
.WithLastName("Lumbergh")
.WithTitle("Manager")
.WithDepartment("Y2K");
Можно легко написать с помощью инициализаторов, таких как:
Employees.Add(new Employee()
{
FirstName = "Peter",
LastName = "Gibbons",
Manager = new Employee()
{
FirstName = "Bill",
LastName = "Lumbergh",
Title = "Manager",
Department = "Y2K"
}
});
Я мог бы также использовать именованные параметры в конструкторах в этом примере.