科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道发扬EJB Spring思想将组件化进行到底

发扬EJB Spring思想将组件化进行到底

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

 EJB、Spring,这不是Java界最有名的两大冤家,何以把它们扯在一起。其实Spring乃是EJB1.x、2.x的继承者,正如EJB之前的COM、CORBA。他们的思想一脉相承,那就是企业级的组件化思想,也可称之为理想

作者: 来源:IT专家网 2008年6月12日

关键字: 组件化 Spring EJB java

  • 评论
  • 分享微博
  • 分享邮件
一、非组件化的国内软件行业

  各个行业的企业总有一些核心业务,长久保持不变,新时期的新业务基本上都是围绕核心业务展开。很长时间以来,IT技术的变化与企业业务的扩展存在着很大的矛盾。当企业的新业务开展之后,如何保证原有业务稳定运行的同时,新业务能够得到IT的支持与扩展?当IT技术有重大进展后,如何保证原有业务的同时进行新技术改造?在以上两种运动中,如何重用原有的技术成果?这是每一位负责任的系统管理员、CIO与及开发商所关心的事情。遗憾的是,组件化思想及实践产生以前,这个矛盾基本上是极难解开的死结。绝大多数的做法就是重写。

  譬如DOS时代,很多单位都使用了单机foxbase版的财务系统,界面虽简但稳定实用;到了Windows时代,流行VB、PB,于是系统重写;再到B/S时代,系统再次重写;到最近热炒的RIA,系统是不是要再次重写?对于很多小产商的作品而言,答案肯定是Yes。

  很多同道可能会说,这样正好啊?我们才可以不断地赚钱。错!

  这样的状况叫“低水平重复”,这个术语经常被国人用来痛斥社会经济领域的很多不合理现象。可惜我们这个自认为高智力的行业,很多时候就是在干这种愚事。每到技术革新,各企业要重花一次钱、重学一次操作、重转一次数据,折腾得半死;而适应不了新技术的产商,随被淘汰的代码一同退出市场;适应不了新技术的程序员,只能转行。要想不被淘汰,就必须紧跟时代风潮,不停地把精力放在新技术上,在领会业务上花的时间太少,最后导致我们的系统与企业的业务总是差半拍。因为原先快把业务搞清楚的程序员大多升官或离职了。

  笔者以为这是软件界,尤其是国内软件界混乱的根本技术原因。由于技术长期得不到积累,我们不得不一次又一次吃外国的人剩饭。

  那我们终究需要怎样的软件才能解决这些问题。

  其实答案早就在我们身边晃了太多年,偏偏我们视而不见。大家接个新外设,要不要换主机?加根内存条、换块显卡、声卡要不要换主板?OS是不是只能用几个特定的硬件,跑几个特定的程序?而大家在OS下写的程序,是不是在系统新版本运行不了?答案基本上是否定的。

  OS可以适应全世界数以万计的程序及其发展,为什么我们的应用程序不能适应哪怕一个特定单位的变化和发展。为什么我们的应用系统到了新环境下就要重写?

  原因就在于我们大多数应用程序规范性太低、耦合度太高。

  要提高规范性、降低耦合度,就要不断地设计、不断地分层、不断地抽象、不断地重构。当我们终有一日把有用和成熟的代码封装成jar或是dll,不仅自己能重用,别人也能重用的时候,代码其实才算合格。

  现在大家都习惯用开源产品了,外国人热衷的就是不断地制造这样的零件(组件)或技术。而我们中国人,热衷的却是组装人家的零件和技术(一如其它涉及技术的产业)。很多外国人十多岁就做出了了不起的组件,而我们中国人却把“不重复发明轮子”这种搬来的话挂在嘴在,结果是既不制造旧轮子,更没有能力发明新轮子。很多人从业十多年都写着乱糟糟代码。

  项目,不是说东西扔到客户手上套足了钱,拍拍屁股就走人。成功的项目,要对客户负责任。就算自己退了,也该把工作交接好。前面的工作成果后面用不上,只能说前面的工作不合格。

  国内应用软件界一直在走RAD的道路,一开始吃着爽,越到后面越不是滋味。不是说RAD不能用,而是说,一上来就RAD,注定被养成懒汉,早晚沦落成编码机器。RAD诱使我们逃避思考,诱使我们逃避设计,最终让我们被早早淘汰!

二、EJB、Spring的组件化实践

  在EJB之前,大家所知的COM和CORBA已然火过一头了。这说明国外企业在经过长时间的信息化实践后,已经深受上面所说“低水平重复”的非组件环境之苦。COM和CORBA的确解决了一些问题,但还没有成为那种完整、成熟的体系。所以当初EJB出来的时候,业界疯狂热炒。这一方面是商业原因,更重要的是企业及开发者对组件化的热切理想。其实EJB的确是成功地解决了很多问题,但由于一开始就定位在高端,技术上相当复杂,导致众多开发者真正未能掌握,由此而产生了很多失败的项目。

  这个时候,MS的.NET开始热了起来。.NET其实整个思想体系都是参照J2EE的。不过沿袭了MS产品一贯的易用风格,中小系统实现比较容易。但凡事有利有弊,MS为了迎合初学者偷懒的心理,架构上的RAD风格是相当明显的。很多人不知不觉中又被养成了懒汉。这导致很多开发者拿着.NET这种OOP的企业级技术,继续做过去那些高耦合的系统。最终结果,不论是开发者还是公司,都将重蹈以上笔者所说的覆辙。

  应该说,J2EE一上来就强制开发者考虑OOP、分层、解耦、重用,这些很复杂但最重要的事情,最终必然后落得个“曲高和寡”的结果。但如果开发者真能以程序设计作为自己的毕生事业,就一定可以在Java的世界里经过痛苦摸索,掌握软件的精髓。

  而后,火热的Spring运动开始了。Rod集多年企业级开发的功力,创造性地开创了简化版的EJB:Spring Framework。这里有个前提,那就是Rod多年企业级开发的实践,包括EJB的实践。正是这个精通EJB的天才人物,才可能对EJB进行简化和发挥。国内很多人自此运动后,把EJB以至于Sun形容得一文不值,却忘了自己每天都在用Java这一伟大的语言,并实践EJB这一技术所传承的组件化思想。而初学者在不明就里的阶段,只记住了Spring的简化,却不知实践组件化的根源所在。也就是说,不是Spring不好,而是说大家应该充分领会Spring所一脉相承的组件化解耦思想,而不只盯住Spring的简化。

  自此,Java界开始了无尽的混乱。人们每天都在考虑如何“简化”J2EE,以至于把J2EE简化到Web+DB,简化到PHP那样高耦合的程度,或者骑墙式的RoR。历史再度倒退,组件化面临严重危机,甚至于坚持组件化的Java也被殃及池鱼。

  这里不得不称赞一下Jdon和当家人banq。其实有一阵笔者也是Spring运动的热心拥护者,对banq的EJB论调相当不感冒。待自己晕头转向了两年,重回jdon,这才体会到banq的苦心。

  正如众所周知的英语学习无捷径,好的程序设计同样没有捷径。

  banq这几年冒天下之大不韪,一再坚持重申这个世间最简单的真理,的确是值得敬佩的。

  三、坚持组件化,打造真正的软件工业

  软件发展到今天,其实应该并且能够进入到工业时代了。

  前面所说的企业软件危机,既是技术问题,也是产业问题。

  今天,地球人的各种产业都是大分工、大合作的工业化产业链。生产效率提高了,就业人群也随之增加。在封建时代,大家都搞小作坊和行会,总觉得如果放开了,分工后大家会没饭吃。但资本主义的实践表明,越是分工合作程度高的产业,规模越大。原因很简单,在生产效率提高的同时,消费被极大地刺激,以至于产业膨胀的速度仍赶不上消费。像现在的汽车,分工合作程度极高,使发达国家的人们买了一辆再买一辆,换了一辆再换一辆,结果是整个汽车产业的繁荣。

  我们软件业(尤以国内为甚)其实也一样,表面上是没事可做,事实上是由于软件业整体的低效率,导致人们用不起软件,或不敢用软件。成天忙于低水平重复导致的低水平局部竞争,企业真正关心的很多需求得不到满足。长久之后企业在信息系统得到的回报太小,自然不愿意花钱在信息系统上。

    • 评论
    • 分享微博
    • 分享邮件