2009年4月12日星期日

Filter和Pipe是一种实用的架构

手上在写的程序需要不断抓取实时信息,然后根据既定的策略做出相应的反应。写着写着,我的程序就变成了经典的Filter-Pipe结构。

我设计了三个接口:InfoProvider,InfoConsumer,InfoFilter。InfoProvider有setInfoConsumer()方法,InfoConsumer有receiveInfo()方法,而InfoFilter是InfoConsumer和InfoProvider的结合。

另外,我还设计了一个InfoSource,它是InfoProvider,但它还有另外两个方法:start()和next()。start()方法的语义是源源不断地提供Info,直到最后提供null。next()则是单步提供Info。

然后,我利用Guice的实例绑定来组建这个处理管道。再用一些确定的数据来测试整个管道的功能是否正确。

根据SOA的思想,我为每个InfoProvider/InfoConsumer/InfoFilter组件设计了一些运行时监控功能。在开发时,可以利用这些功能来确定程序的正确性。在运行时,可以得知程序的实时运行信息。

如果某个Filter没有设置InfoConsumer,它可以在标准输出中输出Info。

很像Unix的管道吧?推荐一本书“Software Architecture: Perspectives On an Emerging Discipline” by Mary Shaw & David Garlan,其中提到了Filter-Pipe架构。

没有评论: