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