2010-03-08 35 views
1

编程时对流畅的API或者只是使用的方法,链接,我见过的风格大多是这样的:流利的API和方法,链接样式使用

var obj = objectFactory.CreateObject() 
    .SetObjectParameter(paramName, value) 
    .SetObjectParameter(paramName, value) 
    .DoSomeTransformation(); 

这背后把点的推理该行的开头,而不是像这样的行的末尾:

var obj = objectFactory.CreateObject(). 
    SetObjectParameter(paramName, value). 
    SetObjectParameter(paramName, value). 
    DoSomeTransformation(); 

或者是它只是一种风格的东西,一个团队做一个共识?

回答

11

这仅仅是一种风格的东西。

把这个的好处。在这一行的开头部分,它让我们更快地了解到这不是一个独立的方法调用。

例如,如果你这样做:

var obj = objectFactory.CreateObject() 
    .SetObjectParameter(paramName, value) 

你可以告诉大家SetObjectParameter(...)是被称为一些其他对象的方法,只是在看这条线。这样做:

var obj = objectFactory.CreateObject(). 
    SetObjectParameter(paramName, value) 

需要你看看前面的行告诉。例如,这可能是一个格式化的问题,即:

var obj = objectFactory.CreateObject(); 
    SetObjectParameter(paramName, value); 

(在这里,SetObjectParameter将是对当前类型的方法,而不是通过CreateObject()返回的类型 - 但是,通过查看第二行,这如果没有。开始那条线,这是不明显的)。

+0

该规则不仅适用于Fluent接口,还更广泛地适用于所有**方法链语句,Fluent或其他。 – 2010-03-08 17:00:13

+0

是的 - (这是我为什么从未在我的答案中实际提及“流利”的一部分;)) – 2010-03-08 17:05:31

+0

感谢您的澄清。我相应地编辑了我的问题。 – 2010-03-08 17:08:41

5

三个原因,我能想到的:

  • 这是比较明显的,每条语句是前一个的延续。
  • 我发现Visual Studio的intellisense更喜欢这种方式。
  • 至少在我看来,这在眼睛上更容易。
+3

智能感知+1。恕我直言,这是这个公约的主要原因。当你写一个点时,建议使用方法。所以如果你想在新行上使用该方法,那么这个点也需要在这一行上。 – ewernli 2010-03-08 17:13:26