重用之梦破灭了吗?

10-01-14 banq
                   

重用的软件的美梦,在过去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修改过]

                   

5
zkk0311
2010-01-14 15:46

个人感觉banq说的是很有道理,目前软件的复用的确是软件开发的一大难题,如果要复用,粒度必须要是细粒度,不然就无法进行很好的复用,但是细粒度又给软件的开发造成了很大的困难,不过软件的复用困难也有好处,如果一个软件能够在各个软件上进行复用的话,我们程序员似乎也改集体辞职了

banq
2010-01-14 16:16

呵呵,其实复用在软件领域不断试验,云计算就是一种复用的新尝试,至少可以实现性能的复用,个别提供SAAS的也可以实现业务功能重用。

nojava
2010-01-15 09:26

很好,很多基础结构的framework它们的代码组织很好,抽象性也很高,扩展性也很好,

但这仅是服务于基础结构而已,其实这些基础结构有时候用编程语言就可以解决,没必要那么复杂.

我想一些经验丰富的开发者,除了技术过硬之外,还能有自己的行业基础框架,有自己的架构自然就有了复用的基础.

liujian1979
2010-01-15 09:44

从banq老师帖子真的学到很多,但还是想发发感概:最近在工作中越来越体会到其实很多项目都是“中国式关系”拉来的,只要实现就OK,注重程序稳健,性能,可扩展性的人和能够把代码凑到一块的人待遇差别不大(至少我待的公司是这样)。相比需求稍微变更和添加新功能就要大刀阔斧的改,和设计可扩展性高的程序导致工作量减少到最后领导感觉区别就是:一个加班完成,一个不加班就能完成的区别而已。感觉真是做软件的一种悲哀!也许这也是导致很多人都走向搞管理,不探究技术的人生路线。真希望学习设计之路能在banq老师带领下走的更远!也希望中国的软件环境能更健康的发展下去。

4Go 1 2 3 4 下一页