在逛ithome blog時, 看到這個東東
http://www.ithome.com.tw/plog/index.php?op=ViewArticle&articleId=18421&blogId=257
於是就去查一下資料
歐萊禮的介紹
http://beautifulcode.oreillynet.com/2007/12/the_cardinality_of_a_fluent_in.php
wiki的說明
http://en.wikipedia.org/wiki/Fluent_interface
內容都有提到程式的簡潔及易讀性
甚至可以將程式語法當作文章朗讀
也有提出一些程式的例子
接著又找到以下網址
http://www.jmock.org/
它是JMock testing framework, 專門做java程式的單元測試
是實際使用Fluent interface的最佳範本。
有幾點想法及問題
程式碼是給工程師看的, 這個方法很炫。
什麼時候用這個方式才適合呢??
對於維護修改時, 會遇到什麼問題呢??
程式例子裡, 大部份都是輸入資料的method, 最後才是真正執行的method
以語法的簡潔性來看, 在vb有With...End With可以用, 一樣也可以達到效果
With object
statements
End With
加上幾個連結做參考:
Martin Fowler的文章:http://www.martinfowler.com/bliki/FluentInterface.html
JMock作者們的blog:http://www.mockobjects.com
JMock作者們在2006 OOPLSA發表的論文:Evolving a Domain-Specific Language in Java, OOPLSA 2006
我想跟with的差別在於,他會設計好用特定語意命名的方法,讓你可以把這些方法串接起來組成定的操作來使用,就像用單字組成句子一樣。(所以會提到Domain-Specific Language,最好的例子是SQL)
用with應該還是沒辦法這樣串接方法來用的吧?
to fillano:
with是無法進行這樣子串接的動作, 因為二者思考點及進入點不一樣
所以需要比較的應該是二者解決使用者那些問題,
以及可能產生那些困擾
沒錯,所以怎麼設計還是很重要。
效能的問題,則要看是否「真」的變成問題。其實以jQuery來說,他許多使用方法都要做遍歷DOM Tree的搜尋,應該是很花時間,只是對現在的電腦速度很快,所以實際上感覺沒差。使用上還是要看代價(速度)跟效果(方便)的平衡吧。
我大概7、8年前用javascript跟html實做過isometric地圖,當時跑的速度很慢,現在已經跑的很順了....(最早是用DHTML為主,後來改成以Javascript為主,加上A*做路徑搜尋,不過這也是幾年前的東西了)
我用blog上的例子稍做修改,分別用FluentInterface以及傳統的方式跑10萬次迭代,用FluentInterface style的花1.382秒,傳統的花1.287秒。所以看得出來是有一些scope搜尋的overhead,不過會不會影響使用者的感覺呢?可能要看實際狀況了。不過我猜應該不嚴重。
等一下,前面是ff3的結果....用IE7跑的時候,FluentInterface的反而快一點,大概0.03秒。
to fillano:
_< 您真是有夠認真, 汗顏丫~~
如果效能不是問題的話, 那就跟末端使用者無關了
就要看程式設計人員的反應了
這樣子的簡潔跟易讀
對於現行的程式設計人員的幫助, 有嗎??
常會遇到的情況, 通常是為了程式的簡潔, 犧牲了易讀性