方法链接比普通命令方法调用有什么优势?

时间:2010-08-13 10:46:29

标签: .net fluent-interface

从Telerik MVC网格中查看此示例代码:

<% Html.Telerik().Grid(Model.InstallerList)
    .Name("InstallerGrid")
    .DataKeys(key => key.Add(c => c.InstallerID))
    .Columns(column =>
    {
        column.Template(action =>
            {%>
                <%= Html.ActionLink("Edit", "Edit", new{ id = action.InstallerID}) %> 
            <%});

        column.Bound(model => model.CompanyName);
        column.Bound(model => model.EmailAddress);
    })
    .Scrollable(scrolling => scrolling.Enabled(true))
    .Pageable(paging => paging.Enabled(true))
    .Sortable(sorting => sorting.Enabled(true))

    .Render(); %>  

现在,有什么比这样做更好:

<%
    var grid = Html.Telerik().Grid(Model.InstallerList);
    grid.Name("IntsallerGrid");
    grid.DataKeys(key => key.Add(c => c.InstallerID));
    // etc. etc.

    %>

5 个答案:

答案 0 :(得分:3)

没有真正的区别,在这种情况下,它们只是让你通过返回引用链。优势?它更简洁,你不必自己维护一个引用,除了它更多的是关于风格而不是其他任何东西。

当Telerik的家伙在他们的许多组件中为他们的客户端脚本转换为jQuery(也链接)时,流畅的界面开始出现在他们身上,猜测他们只是喜欢这种风格并将其作为选项提供。

现在在其他情况下,一个方法可能会返回 grid相同的引用或类型,例如.OrderBy()如何返回OrderedQueryable而不是Queryable不仅仅是grid =,在这些情况下,行为存在潜在差异,因为您没有在示例中为每个语句设置{{1}}结果。

答案 1 :(得分:2)

同上“人们将这些称为”流利的界面“。”

一个很大的好处是避免方法中不必要的参数,尤其是构造函数。例如,蛋糕可以有结冰,结冰可以写上文字。

你去找

  Cake cake = new Cake( Icing.None, "" );  // no icing, no words
  Cake birthday = new Cake( Icing.None, "Happy Birthday");  // invalid option!

或可爱的流利风格;

  Cake cale = new Cake();  // No icing, no words
  Cake birthday = new Cake().Icing(Icing.Chocolate).Word("Happy Birthday"); 

答案 2 :(得分:2)

Fluent接口是一种内部域特定语言。如果实施得当,他们可以像自然语言一样阅读。

Martin Fowler的bliki有一篇非常好的文章,详细介绍了利弊。

请注意,Fowler(提出该名称)建议将流畅的界面分层放在更标准的API之上。 Fluent接口中断CommandQuerySeparation

答案 3 :(得分:0)

这些被称为"Fluent Interfaces"

所谓的好处在于可读性和可发现性或代码,尽管具有良好的智能感知,这些可能无法带来最大的好处。

代码变得更加严密,编程风格变得更具说服力 - 你说你想要发生什么,而不是你想要它发生的方式。在这方面,它有助于抽象。

就结果而言 - 没有区别。这仅仅是个人偏好的问题,Telerik作为供应商提供了尽可能多的选择,具有商业意义。

答案 4 :(得分:0)

这些方法链的返回类型可能不一定是原始网格。此外,在您完成它们之后,并非所有这些都可以很容易地表达或有用。使用方法链可以保持紧密,并且将来很容易改变。