Wednesday, June 07, 2006

必要的抽象还是over-engineering?

刚看了一篇DevWorks上的文章"界面组装器模式"。开始觉得是over-engineering,因为隐隐约约感到很像自己,两三年前,刚看完GOF的书,很疯狂地programming with interfaces,不过后来细想一想,作者这么写还是有道理的,因为他的项目有抽象出接口的需求。而当时自己,是没有需求却幻想需求。

是不是要抽象,很难界定,但要不要封装,却是一定的。因为封装就是分离,把变化与不变分离,把变颜色和变形状分离,这种分离,总是好的。

想想绝对需要的一些封装,比如元数据文件,我觉得是必要的,上文作者在一些情况下不同意用元数据文件,但是我觉得不要把元数据文件搞得太复杂就可以。再说可以对XML文件进行validation,JAVA已经把property类拓展到了XML格式,所以能用,绝对应该用。仅仅是为了消除重编译的情况就值得。

前一阵用过一个vcard4j开源库,源文件中间有很多结构类似的类,比如表示各种电话号码的类,FAX, Mobile, or Fixed line。这些类有很多共同的部分,仅仅是相应的函数名不同,但是客观要求不能用类继承的方式进行抽象,所以作者为了避免repeat yourself,就写了一个parser用来生成这些大部分重复的source code.也就是这样一个过程,配置元数据文件-> 运行parser(1.读元数据;2.根据元数据生成部分source code)->编译生成的source code并打包发布。

这是个很好的抽象和封装,这样就把怎样生成文件和生成什么样的文件分离开来,对于我这样后来使用这个库的人来说,改改元数据文件,运行一个parser就能够定制化自己的类,确实省去不少读代码,改代码,写代码的时间。

Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?