【IT168 技术文章】
构件,我们更多的理解为一种资源,一种封装良好的,可供重复使用的代码资源。代码重用或者说资源重用是软件开发里面的老话题,在构件出现以前,人们也在以函数库的形式重用代码,构件是一种对代码组的更好的封装形式,它使得开发人员在设计时可以使用Drag-Drop这样的方式来开发应用,大大减少了手工硬编码的工作量,使新技术的学习曲线更加平滑、代码重用更加的容易,最终结果就是缩短产品的上市时间和提供更为丰富的产品特性。主流RAD工具的应用,推动了第三方构件市场的快速发展,我们不必依赖于软件开发工具厂商的升级来提供函数库和构件库,也不必辛辛苦苦的Coding和debug自己去实现,第三方构件市场为我们解决问题提供了另外一种选择。
我们公司从成立初始至今一直都鼓励第三方构件(Cots)的采购使用和公司内部可复用构件的开发、使用,鼓励在开发过程把自己写的代码和功能以构件形式封装,以最大化的重用代码资源,使代码资源能够发挥杠杆效应,这些做法的效果是非常明显的,我保守估计,构件的重用至少也缩短了我们三分之一强的编码时间、总体上至少节约了几十个人年的开发成本、很大程度上减少了因为人员流动而导致的开发风险。
下文介绍一些我们公司在代码重用及构件化开发方面的一些经验,介于篇幅,这里只能泛泛而谈,仅供参考。
首先,我们需要解决意识问题,简单说,需要在公司范围内建立善用资源的意识,就是努力做到事半功倍、做聪明的开发人员,对于程序代码来说,记住两个原则:1、要最大程度的利用已有的代码,2、创造可以重用的代码资源。让开发人员形成一些正确观念,如:重复就是浪费,跟问题领域有关的创新才有价值,发挥资源的杠杆效应。
其次,我们需要解决如何找到资源的问题,我们先看看第三方的资源,第三方构件已经是一个很大的市场,有许多相关的门户网站,综合的有http://www.componentsource.com ,各主流的构件平台也有各自的第三方资源的门户网,比如说,ActiveX可以到http://www.active-x.com/ , Borland VCL/CLX的构件可以到 http://www.delphipages.com 或者 http://www.torry.net ,门类网站的特点是分类比较齐全,查找比较方便,除了门户网站以外,新闻组(Newsgroup)也是一个非常好的网上资源,一般主流开发工具都会有面向第三方构件商发布Release信息的新闻组服务比如说:
Delphi有news://newsgroups.borland.com/borland.public.delphi.thirdpartytools.general ,Jbuilder有news://newsgroups.borland.com/borland.public.jbuilder.thirdpartytools ,C#Builder有news://newsgroups.borland.com/borland.public.csharpbuilder.thirdparty.general ,新闻组的特点是信息更新快,有很多热心人,你可以使用新闻组进行构件咨询。
选择第三方构件的时候,考虑该公司的技术支持能力也是一个非常重要的因素,可重用构件的开发是件相当困难的事情,就算很完整的构件包也难免有些Bug或者不能满足需求的时候,所以好的技术支持和持续的更新能力非常重要。有些构件会出售有源代码的版本,我们公司一般只买提供所有源代码的构件包,这样的话,有一些比较急的需求开发商无法支持的时候,可以自己定制一部份的功能,一般我们不建议这样来做,最好还是将构件的问题直接反馈给构件开发商,由他们来修改并完善,完整的源代码同时也是一种文档补充,对于FrameWork一类的构件包,没有认真Trace Source的过程光靠手册和样例你是很难用好它的,还有完整的源代码也提供了一种最低限度的保障,当开发商Close或者不再继续提供更新的时候,你仍然可以持续改进。引入新构件也就是引入新技术,对构件的管理应当纳入公司的技术管理体系内,如同制订代码规范,也需要制订第三方构件的使用规范,规范的目的不是限制开发组采用新的构件,而是要保障公司范围内只存在一组完成同类功能的构件技术,以减少因为重复而造成浪费。
第三方构件并不见得都能满足你的需求,你们开发组不可避免要创建大量的代码,这些代码的很大一部份是可以组间进行重用的,可以重用的代码才称得上是技术资源, 程序设计师在写程序的时候应当随时问自己:我这段程序代码是否对别人的程序或将来的程序有用?这段程序代码是否只有我一个人需要,其它人不大可能引用?如果答案是肯定的,这个程序就应当尽可能写成很独立的方式以简化重用的难度,写成构件是一种比较好的方式,因为它可以强迫你减少模块间的依赖性,提高代码的可重用能力,写成构件可能对技术要求比较高,但事实证明,目标提高能够迫使我们想得多一点、深一点、难一点,有时候反而是一种更好的设计方式,在大部份的情况下,我们能够想出一举两得的好方法。另外,程序员也喜欢更有成就感和挑战性的工作,写出可重用的资源并得到他人的重用对于程序员也是一种满足。创造出资源还需要让其它人知道,比较好的做法是建立公司自己的共享代码库,将其纳入变更管理,当有新的资源创造出来时,通知其它项目管理人员。
上文简单谈了一些我们在构件化开发过程中的经验,当然,能力所限,有些问题我们想不到,有些想到了实际操作中也会有这样那样的问题,总之,我们现在也仅仅只是入门阶段,更多的有待坚持下来慢慢体会,我们也非常愿意在这个领域跟大家交换心得体会,以期共同进步。