1

查看来自 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.

    %>
4

5 回答 5

3

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

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

现在在其他情况下,一种方法可能会返回一个引用或与不同的类型,例如如何返回 an而不仅仅是 a 在这些情况下存在潜在的行为差异,因为您没有在您的每个语句的示例。grid.OrderBy()OrderedQueryableQueryablegrid =

于 2010-08-13T10:50:50.690 回答
2

同上“人们将这些称为“Fluent Interfaces”。”

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

你去吗

  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"); 
于 2010-08-13T10:54:10.097 回答
2

流利的接口是一种内部特定领域的语言。如果实施得当,它们可以像自然语言句子一样阅读。

关于 Martin Fowler 的bliki有一篇非常好的文章,详细介绍了优缺点。

请注意,Fowler(他提出了这个名字)建议将流式接口分层在更标准的 API 之上。流畅的界面打破了 CommandQuerySeparation

于 2010-08-13T11:04:04.013 回答
0

这些被称为“Fluent Interfaces”

假定的好处在于可读性和可发现性或代码,尽管具有良好的智能感知这些可能不会带来最大的好处。

代码变得更加紧凑,编程风格变得更加声明式 - 你说你想要发生的事情,而不是你希望它如何发生。在这方面,它有助于抽象。

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

于 2010-08-13T10:50:40.870 回答
0

这些方法链的返回类型不一定是原始网格。此外,在您完成它们之后,并非所有这些都可以轻松表达或有用。使用方法链可以使事情变得紧凑,并且在将来易于更改。

于 2010-08-13T11:26:00.327 回答