这几天写了一个关于面向组合子编程的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) 阅读(4890)
评论(15) 编辑 收藏 引用 所属分类:
作品