在逛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的最佳範本。
有幾點想法及問題
1. 程式碼是給工程師看的, 這個方法很炫。
2. 什麼時候用這個方式才適合呢??
3. 對於維護修改時, 會遇到什麼問題呢??
4. 程式例子裡, 大部份都是輸入資料的method, 最後才是真正執行的method
以語法的簡潔性來看, 在vb有With...End With可以用, 一樣也可以達到效果
With object statements End With
其實看這種方式, 首先想到的是效能上會不會有問題, 再來是維護修改上會不會有困擾
JavaScript可以實作相同的結構, 但是效能上應該會有問題
請參考以下連結
英文
http://blogs.msdn.com/ie/archive/2006/08/28/728654.aspx
http://blogs.msdn.com/ie/archive/2006/11/16/ie-javascript-performance-recommendations-part-2-javascript-code-inefficiencies.aspx
中文(有作者實際測試數值)
http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/09/22/teched-2007-notes-javascript-performance.aspx
因為javascript是直譯式語言, 編譯器實作上使用Hashtable進行查詢
才會有效能上的問題
看其他程式實作都是使用指標, 所以也沒浪費記憶體問題
於 2008-07-03 16:05:09 補充
加上幾個連結做參考:
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應該還是沒辦法這樣串接方法來用的吧?
[-隱藏]
回應 :
aqr199 說:
to fillano:
with是無法進行這樣子串接的動作, 因為二者思考點及進入點不一樣
所以需要比較的應該是二者解決使用者那些問題,
以及可能產生那些困擾
2008-07-03 16:09:26
fillano 說:
沒錯,所以怎麼設計還是很重要。
效能的問題,則要看是否「真」的變成問題。其實以jQuery來說,他許多使用方法都要做遍歷DOM Tree的搜尋,應該是很花時間,只是對現在的電腦速度很快,所以實際上感覺沒差。使用上還是要看代價(速度)跟效果(方便)的平衡吧。
我大概7、8年前用javascript跟html實做過isometric地圖,當時跑的速度很慢,現在已經跑的很順了....(最早是用DHTML為主,後來改成以Javascript為主,加上A*做路徑搜尋,不過這也是幾年前的東西了)
2008-07-04 09:39:28
fillano 說:
我用blog上的例子稍做修改,分別用FluentInterface以及傳統的方式跑10萬次迭代,用FluentInterface style的花1.382秒,傳統的花1.287秒。所以看得出來是有一些scope搜尋的overhead,不過會不會影響使用者的感覺呢?可能要看實際狀況了。不過我猜應該不嚴重。
2008-07-04 10:41:40
fillano 說:
等一下,前面是ff3的結果....用IE7跑的時候,FluentInterface的反而快一點,大概0.03秒。
2008-07-04 10:46:51
aqr199 說:
to fillano:
>_< 您真是有夠認真, 汗顏丫~~
如果效能不是問題的話, 那就跟末端使用者無關了
就要看程式設計人員的反應了
這樣子的簡潔跟易讀
對於現行的程式設計人員的幫助, 有嗎??
常會遇到的情況, 通常是為了程式的簡潔, 犧牲了易讀性
2008-07-04 15:48:28
▼ 最近瀏覽記錄 ▼
相關問答
- [Cloud Computing]force.com 使用者介面即服務
- API 應用程式介面(Application Programming Interface)
- 關於router上的路由規則的優先順序問題
- 何謂SVI
- WPF(Windows Presentation Foundation)
- 請問有人能幫我整合 AWBS、Kayako and vBulletin 嗎?
- AIX - 網路設定與管理 Part I
- 寫物件導向風格的JavaScript
- 電腦沒聲音
- [鐵人賽]部分電腦相關名詞縮寫
- 你未必知的Gmail發信限制
- 請問有什麼程式工具可以在windows2003下紀錄CPU、memory、網卡流量
- 請問一下有關ospf的設定方式
- CCNA-CISCO動態繞送問題
- 常用網路管理工具 Getif (Get Interfaces)教學
- 幾個HP-UX修改網卡IP Address的方式
- [Cloud Computing]DaaS, Development as a Service
- 練習5個步驟,讓你學會Server Core基本操作
- 在iThome看到 加大頻寬 可舒緩DDoS攻擊?










