`
snoopy7713
  • 浏览: 1151948 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

OSGi产生的背景--在繁荣的混乱之中走出困惑

    博客分类:
  • OSGi
阅读更多

软件的复杂性正在以惊人的速度在上升。现在,这些软件的复杂性,有很大一部分是由于缩短了产品的周期,以及功能性需求的大幅度增加,还有相同的产品为了适应不同环境的需要产生的多个版本。这种趋势已经导致软件的成本几乎占据任何一个软件开发商的开发成本的很高百分比。

      目前,软件开发大部分是在一个新的环境中利用已有的系统功能进行的。 近20年来,基于大量的标准的模块开发已经成为可能,并且在现在的软件产品发挥很重要的作用。最好的例子就是开源软件的成功。但是,这些开源软件的使用不是没有问题的。在一个软件产品中集成一些不同的开源软件是很可怕的事情。这些开源软件彼此独立,任何一个开源软件中的某些功能即使在集成中没有用到,但是作为开源软件的一部分,还是必须保留的。这导致了软件更加的复杂。

      这就要求每个软件产品都要经历一个很繁重的测试周期。再加上每个开源的软件都是各自按照自己的进度和成熟度进行升级,导致引用他们的软件无法升级的发展,甚至在有些开源软件升级后对引用系统带来的是灾难性的变化,这更进一步说明现如今软件成本如此之高的原因。

下面引用《开源框架思索》中的部分内容,全文见http://blog.csdn.net/teamlet/archive/2007/10/03/1810703.aspx

开源软件组合困难

  开源的繁荣虽然给各个领域都造就了许多优秀的框架,如Spring,Struts,Hibernate,Lucene、OSCache等等,但却没有出现一个一站式,统管全局的整合开发框架。开发者在享用大餐之前,事先得充当大橱的角色,将这些盐,油、酱、菜按合理的方式调配好。
虽然,我们一直强调整体大于单个的总和,但是如何将单个"个体"正确的组合成发挥更大效应的"整体"却并非易事。因为这些单独的框架都由不同的团队开发,框架与框架之间存在天然的阻抗,这种框架和框架之间的"代沟"需要额外配置和编码才能弥合。

  每个框架都拥有自己的配置文件,框架的整合经常带来配置的灾难,如将Spring和Struts整合时,不仅Struts本身的配置文件一个不能少,在Spring中还需要每个Action提供配置信息,而且两者需要遵守一定的契约。

  相互搭配的框架和框架之间经常会出现相似的或重复的功能,如何取舍,如何使用往往让开发者们为难。如Spring本身提供了AOP方法返回结果的缓存功能,而Hibernate本身也提供二级缓存,究竟两者都使用呢,还是择一而从?往往中间又会引出很多争论。

  框架整合的问题已经日益突出,我们可以在各开源论坛或社区发现大量有关讨论的主题。
  目前也出现了一些试图解决的框架整合问题的开源项目,如国外的AppFuse,国内的SpringSide,为框架的整合提供了专业的指导。但是并没有很好的解决现实开发中的实际需要。这些整合框架为了增加通用性,网都撒得太大,导致整合框架本身象一个庞然大物,让人望而生畏,定制性和灵巧性上都存在不足,降低了它们的实用性,所以这些整合性的开源项目往往降格为指导性的实例。

开源软件升级困扰

         活跃的框架每天都在升级改造,丰富功能。其次由于开源框架在一定程度上存在随意性,往往导致框架在实际使用后,发现大量隐含的Bug,所以有时对某个框架的升级变得不可避免。开源框架比之Sun正规的规范有着更加灵活的升级方式,高低版本不兼容的问题已经成为司空见惯的事情。如著名的Hibernate,其3.0版本和2.0版本的包名都发生了彻底的变化,刚发布的Acegi和低版本也存在很大的差异,无法兼容。

  一个整合性的框架由多个出自于不同团队的框架组成,整合框架在这些组合框架之上高位运行,底层框架的升级变化就造成了组合框架水涨船高的局面,整合框架脆弱的稳定性很容易被打破。

  组合框架的升级还直接带来了开发团队学习的压力,为了熟悉框架新功能和改进,在开发工作之余,他们不得不努力压榨自己的业余时间不断地充电学习。总是某个框架新功能学习还未完成,另一个框架的新版本又在一阵欢呼声中闪亮登场,让开发人员发现自己所有的努力只是一场骑牛追马游戏。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics