C# 为什么要使用流畅的界面?
与经典属性相比,使用它的最大好处是什么 我知道实例名称的重复已经消失了,但仅此而已C# 为什么要使用流畅的界面?,c#,fluent-interface,C#,Fluent Interface,与经典属性相比,使用它的最大好处是什么 我知道实例名称的重复已经消失了,但仅此而已 public class PropClass { public Object1 object1 { get; set; } public Object2 object2 { get; set; } } PropClass propClass = new PropClass(); propClass.object1 = o1; propClass.object2 = o2; public class F
public class PropClass
{
public Object1 object1 { get; set; }
public Object2 object2 { get; set; }
}
PropClass propClass = new PropClass();
propClass.object1 = o1;
propClass.object2 = o2;
public class FluentClass
{
public Object1 object1 { get; private set; }
public Object2 object2 { get; private set; }
public FluentClass SetObject1(Object1 o1)
{
object1 = o1;
return this;
}
public FluentClass SetObject2(Object1 o2)
{
object1 = o2;
return this;
}
}
FluentClass fluentClass = new FluentClass().SetObject1(o1).SetObject1(o2);
在我看来,使用fluent接口设置属性没有什么好处,尤其是使用C#3.0类初始值设定项。当你开始链接方法和操作时,流畅的界面会变得更加有趣。在我看来,这不一定有什么大的优势,或者像上面那样简单的类(具有一些属性的类)。一方面,这是一种不同的语义,一些开发人员对此很满意。另一方面,我认为它在某些领域非常有利,比如ASP.NETMVC。。。我使用Telerik MVC控件,它使用一个流畅的界面,使用它设置控件非常好;MS方式需要使用集合和匿名类,使用起来并不方便
嗯。这取决于它的使用方式。在您的示例中,使用流畅的界面没有多大意义 另一方面,fluent界面对于构建器等方面非常有效,尤其是当您将多个fluent构建器链接在一起时(例如,汽车构建器/引擎构建器)。我用得很广泛,效果也很好。如果没有流畅的界面,你也可以做同样的事情,但是使用起来并不好 此外,还有Martin Fowler从特定领域的语言角度提出的问题 唯一的问题是,人们有时会对流畅的接口有点疯狂,并创建过于冗长的API,但在我看来,这不是一个流畅的接口问题,而是一个应用程序/实现问题。fluent pattern(Builder)当您希望减少代码重复和减少每个类之间的依赖性时,这将是最大的好处。对于C#3.5+,您可以通过创建方法扩展(如LINQ或以下代码)来创建fluent模式
public BaseControl
{
public void RenderControl(HTMLWriter writer) {}
}
public TextBox : BaseControl
{
public string Text { get;set; }
}
public static T TabIndex<T>(this T control, int index) where T : BaseControl {}
var pmLogOnName = Html.CreatePopUpMenu("pmLogOnName")
.AddMenuItem("mLogOnName-RememberMe", "Remember UserName", isCheckBox: true, isSelected: true);
Html.CreateTextBox("txtLogOnName", 1)
.BindData(Model, x => x.LogOnName, "showError")
.WaterMark(LogOnView.LogOnName)
.BindMenu(pmLogOnName)
如您所见,您可以减少BaseControl类不必要的代码。但你可以像我展示的那样把它插上。这个概念适用于许多具有高耦合率的类
顺便说一下,我喜欢这种模式,因为它使我的代码像下面的代码一样易于阅读
public BaseControl
{
public void RenderControl(HTMLWriter writer) {}
}
public TextBox : BaseControl
{
public string Text { get;set; }
}
public static T TabIndex<T>(this T control, int index) where T : BaseControl {}
var pmLogOnName = Html.CreatePopUpMenu("pmLogOnName")
.AddMenuItem("mLogOnName-RememberMe", "Remember UserName", isCheckBox: true, isSelected: true);
Html.CreateTextBox("txtLogOnName", 1)
.BindData(Model, x => x.LogOnName, "showError")
.WaterMark(LogOnView.LogOnName)
.BindMenu(pmLogOnName)
可能不用于设置属性,但用于链接操作,例如,乘5、加3、除7等。
Fluent接口
在处理规范模式时非常有用。它将n个规范链接为一个,如中所示,听起来像您想要一个带有
块的VB.Net。流畅的界面
在处理规范模式时非常有用。它将n个规格链接为中给出的一个规格