重用之梦破灭了吗?
重用的软件的美梦,在过去20年中,几乎所有的主要技术都自吹自擂是可重用的。但是现实如何呢?
重用本来是节省软件开发,在90年代早期,面向对象说可以做到,但是却没有,到90年代后期,面向构件的开发说可以做到,但是也没有,往后,SOA说可以做到,还是没有,为什么重用如此之难?
Reuse: Is the Dream Dead?提出了自己看法,那是因为有一个公式现象:
Maximizing reuse complicates use.
重用越高,越难以使用。
作者认为越是重用度越高,就越复杂,复杂导致难于继续使用,如今各种框架如 Web frameworks, ORM frameworks, 和 security frameworks 等等名目繁多,但是他们都是水平方向,而非垂直方向,他们只是侧重基础底层和管道性代码,而非业务逻辑,所以,作者认为的垂直方向是从业务组件入手。
个人感觉这个方向是对的,就象DDD领域驱动设计就是从业务建模入手,DDD中也提出了模块化概念,一个模块可以包括一个聚合边界。那么。让我们来看看作者的业务组件入手,有哪些概念?
Granularity粒度
粒度是一个重要原则,但是粒度粗细很难衡量,作者认为:粗粒度构件更容易使用,而细粒度组件则更加易于重用,这是一对矛盾。
Weight重量
轻重是表示一个构件所依赖的环境范围,重量很依赖它的运行环境,而轻量则没有这种依赖,当构件需要在不同环境下运行时,我们通过配置来实现,跨环境重用越多,配置越多,导致每次使用配置麻烦,易用性差。
轻量构件更易于重用,重量构件更易于使用。
作者提出观点:如何在重用和易用之间取得一个平衡,根据实际情况进行取舍。
个人认为,作者只是提出了问题,没有直接给出解决方案,导致这种矛盾现象还是与松耦合粒度细分方法有关,到底按什么标准来粒度细分,面向对象过去提出按照Class结构来,现在面向函数提出按照functional功能来。
说白了一句话,如何细分后,又能方便的组合在一起,切分得下去,也组合得起来,Qi4j提出的面向组合式编程基本也是这个思路。当然,使用模块化方式组合也是一种方向。
[该贴被banq于2010-01-14 15:30修改过]