首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么要使用流畅的界面?

为什么要使用流畅的界面?
EN

Stack Overflow用户
提问于 2009-12-30 18:39:50
回答 4查看 468关注 0票数 4

与经典属性相比,使用它有什么大的好处?

我知道实例名称的重复已经不存在了,但仅此而已?

代码语言:javascript
运行
复制
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);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-30 18:43:41

IMHO使用fluent接口设置属性没有多大好处,特别是使用C# 3.0类初始化器。当你开始链接方法和操作时,流畅的接口会变得更加有趣。

票数 6
EN

Stack Overflow用户

发布于 2009-12-30 18:51:54

这取决于它是如何使用的。在您的示例中,使用fluent接口没有多大意义。

另一方面,流畅的界面对于像构建器这样的东西非常有效,特别是当你将多个流畅的构建器链接在一起时(例如汽车构建器/引擎构建器)。我已经广泛地使用了Test Data Builders,它们工作得非常好。你可以在没有流畅的界面的情况下做同样的事情,但是使用起来不是很好。

此外,还有Martin Fowler explains here的领域特定语言角度。

唯一的问题是,人们有时会对流畅的接口感到有点疯狂,并创建过于冗长的API,但在我看来,这不是流畅的接口问题,而是应用程序/实现问题。

票数 2
EN

Stack Overflow用户

发布于 2009-12-30 18:59:11

当您想要减少代码重复并减少每个类之间的依赖时,Fluent模式(Builder)将是最大的好处。对于C# 3.5+,您可以通过创建方法扩展来创建流畅的模式,如LINQ或以下代码。

代码语言:javascript
运行
复制
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来设置您想要的制表符索引控件,如下所示。

代码语言:javascript
运行
复制
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类不必要的代码。但你可以像我展示的那样改变插头。这个概念适用于很多具有高耦合率的类。

顺便说一下,我喜欢这个模式,因为它使我的代码易于阅读,就像下面的代码一样。

代码语言:javascript
运行
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1979512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档