与经典属性相比,使用它有什么大的好处?
我知道实例名称的重复已经不存在了,但仅此而已?
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);发布于 2009-12-30 18:43:41
IMHO使用fluent接口设置属性没有多大好处,特别是使用C# 3.0类初始化器。当你开始链接方法和操作时,流畅的接口会变得更加有趣。
发布于 2009-12-30 18:51:54
这取决于它是如何使用的。在您的示例中,使用fluent接口没有多大意义。
另一方面,流畅的界面对于像构建器这样的东西非常有效,特别是当你将多个流畅的构建器链接在一起时(例如汽车构建器/引擎构建器)。我已经广泛地使用了Test Data Builders,它们工作得非常好。你可以在没有流畅的界面的情况下做同样的事情,但是使用起来不是很好。
此外,还有Martin Fowler explains here的领域特定语言角度。
唯一的问题是,人们有时会对流畅的接口感到有点疯狂,并创建过于冗长的API,但在我看来,这不是流畅的接口问题,而是应用程序/实现问题。
发布于 2009-12-30 18:59:11
当您想要减少代码重复并减少每个类之间的依赖时,Fluent模式(Builder)将是最大的好处。对于C# 3.5+,您可以通过创建方法扩展来创建流畅的模式,如LINQ或以下代码。
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 {}完成上述代码后,您可以使用TabIndex来设置您想要的制表符索引控件,如下所示。
BaseControl control1 = new BaseControl();
control1.TabIndex(1);
// Moreover, you can use this for any devired controls like this
TextBox control2 = new TextBox()
{
Text = "test"
};
// The following method still return TextBox control.
control2.TabIndex(2);如您所见,您可以减少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)https://stackoverflow.com/questions/1979512
复制相似问题