這幾天寫了一個關于面向組合子編程的ppt。幾個月前跟某個dev lead借了他翻譯的中文版
Pattern Hatching,條件是要在公司里面開一場關于設計模式的講座。其實本來一個月前就要講了,不過中間出了點事情,所以等到這個月才開始。因此我挑選了面向組合子編程的這個主題,做了個demo和ppt。
面向組合子編程原本是函數式編程的內容,主要說的是既然我們可以用Composite模式(參見
這里和
這里)來做出像樹一樣的數據結構,那么我們做出組合起來跟樹一樣的行為(譬如Command模式,用類代表行為)不也可以嗎?這個做法當然是行得通的,只不過一般我們很難看到一個需求的時候,可以意識到可以用面向組合子編程來搞定這個東西。因此我在這個ppt里面就舉了這樣的一個例子,也就是老掉牙的Log系統了:
我們編譯器在編譯代碼的時候,會產生下面的文件:
buildchk.err -- 記錄著錯誤
buildchk.wrn -- 記錄著警告
buildchk.log -- 記錄所有詳細信息和時間戳
命令行窗口 -- 記錄摘要,當然錯誤和警告還是要輸出來的,只是內容可以簡要一點
然后我就用面像組合子來開發了一個小巧玲瓏的系統,最終通過一個聲明式編程的接口暴露出來,然后你還可以往里面添加新的功能。
當然系統還是要經得起修改的,因此我還舉了個例子,如果有了需求變更——
err和wrn要加錯誤/警告的序號
支持GUI了——跟VS的錯誤列表差不多
最后展示了面向組合子編程最強大的威力——只需要添加零件,所有已經存在的工具都可以立刻在這個零件上面使用了,因此只需要非常少的代碼就可以完成這個需求變更。
這里就
放上我的ppt了。明天還要先開一個內部講座看看別人有什么意見然后進一步修改,完了demo在放出來。這個demo當然是C#寫的了,有GUI,C++寫GUI多麻煩啊……
posted on 2010-08-16 09:10
陳梓瀚(vczh) 閱讀(4914)
評論(15) 編輯 收藏 引用 所屬分類:
作品