2010-03-08 34 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