软件å¤�用本质是为了快速适应ä¸�æ–å�˜åŒ–的需求(adapt to changing needs ï¼‰ï¼Œä¸¤è€…ç›®æ ‡æ˜¯ä¸€è‡´çš„ï¼Œä½†æ˜¯å½“æˆ‘ä»¬è¿‡äºŽæ³¨é‡�软件å¤�用(如组件å¤�用component reuseå�ˆè¯‘构件å¤�用)时,å�ƒä¸‡éœ€è¦�牢记:快速适应ä¸�æ–å�˜åŒ–çš„éœ€æ±‚æ˜¯æ ¹æœ¬ç›®çš„ï¼Œå®ƒçš„é‡�è¦�性è¦�é‡�于组件å¤�用技术本身。本文试图é˜�述两者概念比较以å�Šæ—¶ä¸‹æµ�行的组件å¤�用技术概è¦�。
  适应需求å�˜åŒ–现如今是一个计划赶ä¸�上å�˜åŒ–的时代,ä¼�业竞争力é€�æ¸�表现在ä¼�业适应å�˜åŒ–能力的竞争,è°�能更快适应市场的å�˜åŒ–,è°�就能够在竞争ä¸èƒœå‡ºï¼Œè¿™ç§�快速适应能力如果é� “人民战争â€�æ— ç–‘æ˜¯ä¸�现实的,软件å�¯ä»¥å¸®åŠ©æˆ‘ä»¬æ�¥é€‚应这ç§�快速å�˜åŒ–。
  谈到这里,ç¨�å¾®å†�说明一下国人软件教育的误区,ä¸�错,软件曾ç»�是科å¦è®¡ç®—çš„å·¥å…·ï¼Œå› æ¤ï¼Œæˆ‘们é�žå¸¸æ³¨é‡�软件的算法和数æ�®ç»“构,甚至将之作为数å¦çš„è¡�生物,但是,现如今已ç»�æˆ�为一ç§�帮助我们快速å“�应å�˜åŒ–的有力工具,如果我们的教育背景ä¸å�ªæœ‰ç®—法和数æ�®ç»“构,能够编制出应付快速å�˜åŒ–的软件å�—?很显然,他们是风马牛ä¸�相å�Šï¼Œç”±æ¤å�¯è§�国人软件概念和软件教育的è�½å�Žæ€§ï¼Œåœ¨è¿™æ ·çš„软件认识背景下,固然设计模å¼�的崇高ä½�置得ä¸�到确立,软件设计被抛弃在脑å�Žï¼Œç¼–制出的大多数ä¼�ä¸šè½¯ä»¶ç³»ç»Ÿæ ¹æœ¬ä¸�具备应付å�˜åŒ–的能力,程åº�员拒ç»�频ç¹�更改程åº�ï¼Œç”šè‡³å€ŸåŠ©æŠ€æœ¯åŽŸå› é˜»æ‰°è½¯ä»¶çš„é¢‘ç¹�更改,这ç§�软件程åº�员和软件用户之间的矛盾å�¯ä»¥ç§°ä¸ºmiscommunication, miscommunication是导致软件系统的失败一个é‡�è¦�åŽŸå› ã€‚
  国内早就有著å��言论:“ä¸�上ERPç‰æ»ï¼›ä¸Šäº†ERP找æ»â€�ï¼Œå¦‚æžœä½ çš„ä¼�业ä¸�上ERPï¼Œé‚£ä¹ˆä½ çš„ä¼�业就ä¸�能借助软件应付快速的市场ç‰çŽ¯å¢ƒå�˜åŒ–,那么必然会被淘汰;但是,如果上了一个ä¸�注é‡�“适应需求å�˜åŒ–â€�çš„ERP软件系统,那就是ä¼�业被僵化的ERP软件框æ»ï¼Œä¸§å¤±äº†ä½¿ç”¨ERPçš„æ ¹æœ¬ç›®çš„ã€‚
  适应需求å�˜åŒ–则æˆ�为现代软件系统一个åœåœä¸�å€¦çš„è¿½æ±‚ç›®æ ‡ï¼Œé‚£ä¹ˆå¦‚ä½•å®žçŽ°å‘¢ï¼Ÿ
  原则:给予人们å�¯ä»¥è£�剪他们系统的能力应适应需求å�˜åŒ–,建立一个适应需求å�˜åŒ–的系统,å…�许系统在一系列å°�çš„ã€�å�¯æŽ§åˆ¶çš„æ¥éª¤ä¸Šè¿›è¡Œæ”¹å�˜ã€‚
  组件诞生将ä¸�å�˜çš„通用的东西抽象出æ�¥ï¼Œä»¥è¾¾åˆ°åœ¨ä¸�å�Œé¡¹ç›®ä¸é‡�用å¤�用,将我们有é™�的精力集ä¸åœ¨é¡¹ç›®å…·ä½“å�˜åŒ–和特点上。当然这些抽象å¤�用的东西之间彼æ¤å¿…须是æ�¾è€¦å�ˆï¼Œè¿™æ ·æ‰�èƒ½æ ¹æ�®éœ€æ±‚挑选组å�ˆã€‚
  让我们先回顾一下软件的å�‘展å�²ï¼Œè½¯ä»¶å¼€å�‘çš„å�‘展å�²å®žé™…是一部我们æ€�ç»´ä¸�æ–æŠ½è±¡æ‹”é«˜çš„å�‘展过程,这ç§�抽象概念é�žå¸¸ç±»ä¼¼äºŽå»ºæ¨¡çš„æ€�考方å¼�:概è¦�贴切地æ��述事物,忽视次è¦�的细节。抽象体现在软件开å�‘上就是æ¯�个具体项目需è¦�完æˆ�的代ç �行数é‡�è¶Šæ�¥è¶Šå°‘。
  从1970到1980这段时间,软件开å�‘从机器è¯è¨€åˆ°æ±‡ç¼–è¯è¨€ã€‚进而å�‘展到高级è¯è¨€ï¼Œç”šè‡³ä¸€äº›CASE工具,é�¢å�‘功能编程å�‘展到é�¢å�‘对象编程,功能模å�—é‡�用细化到类的é‡�用,类的é‡�用是åˆ�是通过设计模å¼�实现的。
  进入90年代䏿œŸï¼Œè¯žç”Ÿäº†åŸºäºŽç»„件的开å�‘模å¼�(CBD:component based development),CBD将抽象概念带往了一个新的方å�‘,与å‡�少代ç �æ•°é‡�相å��,CBD将功能å�„个方é�¢ç»†åŒ–分离到ä¸�å�Œçš„ã€�相互隔离层ä¸ï¼Œå¦‚表现层ã€�业务逻辑层ã€�æŒ�久层ã€�安全层以å�Šæ ¸å¿ƒå±‚ç‰ï¼Œå¹¶ä¸”å�¯ä»¥ç®¡ç�†è¿™äº›ç»„件之间的ä¾�赖关系,通过这ç§�分离,我们å�¯ä»¥æ��纯细化组件功能,进而产生å�¯ä»¥é‡�用的框架,如Struts框架å�¯ä»¥é‡�用在大部分应用系统的表现层ä¸ï¼Œï¼ŒStruts+JdonFramework+Hibernate是一个框架组å�ˆï¼Œä»£è¡¨ä¸€ç§�架构设计,这ç§�架构设计其实å�¯ä»¥é‡�用在大部分应用系统,这ç§�é‡�用我称之为架构级别é‡�用。
  组件å¤�用软件组件(Software components)是软件æ��供业务或技术功能的基本å�•å…ƒæˆ–å…ƒç´ ï¼Œè¿™äº›å�•å…ƒå�¯ä»¥ç‹¬ç«‹åœ°è¢«éƒ¨ç½²ã€�他们å�¯ä»¥è‡ªæˆ‘管ç�†å¹¶ä¸”被虚拟部署到网络的任何地方,业务组件((Business components)执行业务逻辑ã€�é�µå¾ªä¸€å®šçš„业务规则并且管ç�†ç›¸åº”的数æ�®ï¼ˆæ•°æ�®åº“æ“�作称为manage corporate data);而技术组件(Technical components)则æ��供相应的平å�°ä»¥ä¾¿ä¸šåŠ¡ç»„ä»¶å�¯ä»¥ä¾�赖其上è¿�行,例如æ�ƒé™�ã€�组件管ç�†ç‰ã€‚
  JdonFramework/Spring都属于一ç§�技术组件框架,而我们具体项目的业务层代ç �如果能够æ��炼å�¯ä»¥å¤�用,则是业务组件;JdonFramework/Spring则都æ��供了业务组件赖于è¿�è¡Œçš„ä¸€äº›æ ¸å¿ƒåº•å±‚æœºåˆ¶ï¼Œç‰¹åˆ«æ˜¯ç»„ä»¶çš„ç®¡ç�†ï¼Œå¦‚组件的创建ã€�组件的获得ã€�组件的资æº�管ç�†ã€�组件的消亡ç‰ç”Ÿå‘½å‘¨æœŸæ”¯æŒ�,所以,我们å�¯ä»¥åœ¨JdonFramework/Springä¸åŠ å…¥è‡ªå·±çš„ä¸šåŠ¡ç»„ä»¶ï¼Œå½“ç„¶ï¼ŒJdonFramework还æ��供了Sessionç‰çжæ€�管ç�†çš„æ”¯æŒ�功能,为业务组件æ��供了更广阔的生命周期支æŒ�。
  组件å¤�用技术以å‰�是å�œç•™åœ¨ç¼–译å‰�期,也就是说:我们在编程时,导入所需è¦�的其他组件Jar包,然å�Žæ··å�Œæˆ‘们的项目编译部署,但是这需è¦�通过专业技术人员实现,很显然是ä¸�能适应原则ä¸å�¥ï¼šç»™äºˆäººä»¬å�¯ä»¥è£�剪他们系统的能力应适应需求å�˜åŒ–,这里的“人们â€�应该是指软件终用户,应该给予用户自己改å�˜ç³»ç»Ÿçš„能力,也就是说:需è¦�æ��供软件系统è¿�行时能够报考改å�˜è‡ªèº«çš„能力。
  组件å¤�用技术以å‰�å�œç•™åœ¨è½¯ä»¶ç¼–译阶段,现在则更é� å‰�,必须在软件è¿�行阶段,当然对技术è¦�求相当高,需è¦�è¯è¨€æ”¯æŒ�RTTI(简å�•å�ˆç¥žç§˜çš„Class.forNameå�‘挥作用了),这在“Evolution, Architecture, and Metamorphosisâ€�一文ä¸è¢«è®¤ä¸ºæ˜¯Metamorphosis,现在由于AOP技术出现,AOP有一ç§�报考Weaving技术,实际就是在软件è¿�è¡Œæ—¶å®žçŽ°æŠ¥è€ƒæ‹¦æˆªï¼Œè¿™æ ·ç»™äºˆç»ˆç«¯ç”¨æˆ·æ›´å¤§çš„æ”¹å�˜ç³»ç»Ÿèƒ½åŠ›ï¼Œä»–ä»¬åŸºæœ¬å�¯ä»¥ä»¥æŠ¥è€ƒæ�’拔的概念实现多个组件的组å�ˆè¿�行。在“AOP vs Decoratorâ€�一文ä¸ï¼Œæˆ‘把编译阶段的组件组å�ˆæ–¹å¼�(我更愿æ„�称为é�™æ€�组å�ˆï¼‰å’Œè¿�行时组å�ˆç‰ä¸¤ç§�处ç�†æ–¹å¼�,å�ˆå¹¶ç§°ä¸ºè¿‡æ»¤å™¨æ¨¡å¼�ï¼Œå¦‚æžœä½ å¸Œæœ›é‡‡å�–组件å�¯æ�’æ‹”å¼�çš„å¤�用,就å�¯ä»¥ä½¿ç”¨è¿‡æ»¤å™¨æ¨¡å¼�。
  组件��拔更�为什么说组件的��拔�常��?
  组件é‡�用目的是为了更好地适应需求å�˜åŒ–,但是有了组件é‡�用ä¸�代表就快速适应需求å�˜åŒ–ï¼Œå› ä¸ºç»„ä»¶æœ¬èº«ä¹Ÿä¼šäº§ç”Ÿè®¾è®¡é”™è¯¯ï¼ˆæ��炼得ä¸�够抽象或者组件很难以替代),这就必然导致软件系统得维护æˆ�本æ��高,那么快速适应需求å�˜åŒ–çš„ç›®æ ‡ä¹Ÿå°±æˆ�为一纸空文。实践è¯�明:组件设计问题已ç»�æˆ�为导致软件开å�‘失败的一个主è¦�å› ç´ ã€‚
  组件设计有两个主è¦�风险:组件æ��纯的纯度和组件的替代方å¼�。æ��炼的纯度也就是抽象的高度,组件的抽象程度越高,当然å�¯é‡�用范围越广,但是往往我们å�ªæœ‰ç»�历多个项目å�Žï¼Œæ‰�å�‘现自己的组件æ��ç‚¼è¿˜æ¬ ç�«å€™ï¼Œè¿™å®žé™…是组件的æ��炼过程æˆ�本。
  组件æ��练虽然å�–å†³äºŽäººä¸ºè®¾è®¡å› ç´ ï¼Œä½†æ˜¯åœ¨å®žçŽ°æ‰‹æ®µä¸Šä¹Ÿä¾�赖于组件的替æ�¢æ–¹å¼�,通过ç»�常å��å¤�频ç¹�的微调和更æ�¢ï¼Œæ‰�能将组件ä¸�æ–æ��炼å�‘ç�†æƒ³çжæ€�é� 拢,所以,必须有一ç§�方便的组件替æ�¢æ–¹å¼�æ��供频ç¹�æ›´æ�¢æ”¯æŒ�,我们总ä¸�希望更æ�¢ç»„件象以å‰�æ›´æ�¢æ±½è½¦å�‘动机ç�«èŠ±å¡žä¸€æ ·ï¼Œéœ€è¦�拆开汽车,打开å�‘åŠ¨æœºé‚£æ ·éº»çƒ¦å�§ï¼Ÿ
  å�‚考PC电脑硬件设计:更新CPUæˆ–å†…å˜æ�¡ï¼Œå�ªè¦�直接æ�’拔就å�¯ä»¥ï¼Œè¿™äº›éƒ¨ä»¶å’Œæ¯�版都是一ç§�æ�¾æ•£çš„ã€�å�¯æ�’拔的关系,如果软件组件替æ�¢æ˜¯æŠ¥è€ƒçš„å�¯æ�’æ‹”æ›´åŠ æ–¹ä¾¿ç»ˆç«¯ç”¨æˆ·åœ¨è½¯ä»¶ç³»ç»Ÿäº¤ä»˜å�Žï¼Œæ ¹æ�®éœ€æ±‚改å�˜ä»–们的系统。组件å�¯æ�’拔本质上是这些组件必须是化的æ�¾è€¦å�ˆï¼Œå½¼æ¤ä¾�èµ–å½±å“�é�žå¸¸å°�,æ�¢å�¥è¯�说:如果实现了å�¯æ�’拔更æ�¢ï¼Œè¯´æ˜Žä½ 的组件已ç»�实现æ�¾è€¦å�ˆäº†ã€‚
  那就有å�¯èƒ½è®¾è®¡ä¸€ç§�软件框架:它能够为æ¯�个部件æ��ä¾›é�žå¸¸æ£’çš„æœ�务访问,软件组件是 æ�¾è€¦å�ˆâ€™loosely coupledâ€™ï¼Œè¿™äº›ç»„ä»¶çš„å¤§éƒ¨åˆ†é€šè¿‡å‡ è¡Œä»£ç �å°±å�¯ä»¥å®žçŽ°æ›¿æ�¢ã€‚ç›®å‰�è¿™ç§�方便的实现方å¼�是使用XML进行组件的é…�置。
  JdonFramework/Springéƒ½æ˜¯è¿™æ ·çš„ä¸€ç§�框架,JdonFrameworkæ›´è¿›æ¥çš„æ˜¯ï¼šJF框架本身的组件也是å�¯ä»¥æ›¿æ�¢çš„ï¼Œä¾‹å¦‚ä½ å¸Œæœ›åœ¨JFä¸ä½¿ç”¨Springçš„é…�ç½®æ–‡ä»¶ï¼Œé‚£ä¹ˆä½ å�ªè¦�å�šä¸€ä¸ªSpringé…�置文件的解æž�组件,然å�Žæ›¿æ�¢JF框架原æ�¥çš„XMLè§£æž�器就å�¯ä»¥äº†ã€‚æ— è®ºEJB2/EJB3ç‰åœ¨è¿™æ–¹é�¢è¦�ç¨�逊于Ioc/AOP框架,对于支æŒ�EJB3çš„JBoss 4 è¿™æ ·æž¶æž„ï¼Œéœ€è¦�报考更æ�¢AOP拦截器还ä¸�æ˜¯å¾ˆæ–¹ä¾¿ï¼Œå› ä¸ºJBoss 4本身组件没有象JFé‚£æ ·å�šåˆ°å�¯æ�’æ‹”é…�置,ä¸�过,JBoss 5å·²ç»�开始走上这æ�¡è·¯ï¼Œä½¿ç”¨ä¸€ä¸ªå¾®æ ¸å¿ƒæ�¥ç®¡ç�†æ‰€æœ‰çš„å�¯æ�’拔组件,我曾ç»�在“JBoss 5迎æ�¥ä¸é—´ä»¶å½»åº•çš„å�¯é…�置时代â€�ä¸€æ–‡ä¸æ��出组件是å�¦æ–¹ä¾¿æ›¿æ�¢æ˜¯è¡¡é‡�一个组件框架的é‡�è¦�æŒ‡æ ‡ã€‚
  在近的TheServerSideæ–‡ç« â€™Service Access’ to the software componentsä¸ï¼Œä¸»è¦�是谈论了表现层组件的替æ�¢è®¿é—®æ–¹å¼�,GIFè¿™æ ·å›¾ç‰‡ç»„ä»¶ä¸�å�¯ä»¥éš�æ„�控制调整,基本ä¸�能å¤�用,但是通过SVG或XUIç‰æ”¯æŒ�XML组件报考替æ�¢æŠ€æœ¯çš„使用,则å�¯ä»¥å®žçŽ°æ˜¾ç¤ºå›¾å½¢ç»„ä»¶çš„å¤�用。
  SOA在软件è¿�行时,给予用户报考æ�’æ‹”å¼�æ›´æ�¢ç»„件,达到å¤�ç”¨çš„ç»„ä»¶æ›´åŠ é€‚å�ˆå�˜åŒ–çš„éœ€æ±‚ï¼Œè¿™æ˜¯è½¯ä»¶ä¸šè¿½æ±‚çš„ç›®æ ‡ï¼Œè€ŒSOA(Service Oriented Architecture)则是从å�¦å¤–一ç§�æ–¹å�‘也是在è¿�行时æ��供用户一ç§�改å�˜ç³»ç»Ÿçš„能力。
  SCBA(Services and Components Based Architecture), SCBA是通过å‡�少需求å�˜åŒ–带æ�¥çš„ä¼ é€’æ�Ÿè€—和时间æ�¥å®žçŽ°çš„ï¼Œå½“éœ€æ±‚å�˜åŒ–时,SOAçš„æœ�务将支æŒ�è·Ÿè¿›å�˜åŒ–和替æ�¢ã€‚
  SCBA更强调的是一ç§�业务过程é‡�用,而且是跨组织跨多个专业域范围的,例如我以å‰�说的四色图实际是对跨域范围的业务总结,特别是ERP域范围,大多数ä¼�业系统都是由MIç‰å››ç§�原始模型组æˆ�的,例如JiveJdon3看上去å�ªæ˜¯ä¸€ä¸ªè®ºå�›ç³»ç»Ÿï¼Œå®žé™…ä¸�å�ªæ˜¯ï¼Œå®ƒçš„Message模型å�¯ä»¥é‡�用在网站内容系统ã€�æ–°é—»å�‘布系统ã€�电å�商务系统ã€�仓库管ç�†ç³»ç»Ÿã€�资æº�管ç�†ç³»ç»Ÿç‰è·¨åŸŸèŒƒå›´ä¸ï¼ˆéƒ¨åˆ†å·²ç»�实现)。
  既然业务过程和IT系统å�¯ä»¥è·¨ç»„织跨域é‡�用,那么类似软件系统的维护和开å�‘å°±ä¸�å¿…å†�é‡�æ–°å¼€å�‘,JiveJdon3çš„Message模型é‡�用在新闻å�‘布系统ä¸ï¼Œæˆ‘需è¦�把JiveJdon3的项目拷è´�到新闻å�‘布系统ä¸ï¼Œç„¶å�Žå†�针对新闻å�‘布系统特点å�šäº›è£�剪修改,这这ç§�å¤�制业会带æ�¥å·¥ä½œé‡�和维护é‡�,而SCBA则å�¯ä»¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼Œé€šè¿‡è¿�行时single-copy reuse分享å�„ç§�æœ�务功能。
  总结本文总结了软件å¤�用的ä¸�å�Œå±‚次:设计å¤�用ã€�组件架构å¤�用以å�Šä¸šåŠ¡æ¨¡åž‹å¤�用,å¤�用技术 çš„ä¸�æ–å�‘å±•æ£æ˜¯ç”±äºŽé€‚应å�˜åŒ–需求的è¦�求ä¸�æ–æ��高导致,本人从2002年开始从事å¤�ç”¨æŠ€æœ¯ç ”ç©¶ï¼Œåˆ�从å¤�用层次底层设计模å¼�开始,在国内媒体次全é�¢åˆ†æž�了GoF设计模å¼�,ç»�è¿‡è¿™å‡ å¹´å�‘展,亲身体会å¤�用技术已ç»�è¿›å…¥äº†ä¸€ä¸ªæ–°çš„é˜¶æ®µã€‚ç‰¹å†™æ¤æ–‡ä½œä¸ºå°�结。
æ�¥æº�:考试大-建ç‘工程类考试
责编:ljwzmznd çº é”™