行业应用软件构件化之我见
构件是可独立部署的单元,具有一定的功能和结构,符合一定的标准。它隐藏了具体实现,没有外部的可见状态,通过提供接口对外部提供服务。构件是为组装服务的,通过重新安排、组装,构件得到复用。
构件技术是软件界最受欢迎的主题之一,早在1968年,Doug McIlroy就曾预言大规模的构件生产将会解决所谓的软件危机。随着OMG的CORBA标准、SUN的JavaEE标准、微软的.NET框架的提出,以及Web Services等技术的发展,构件技术在软件开发中扮演着越来越重要的角色。像目前大多数操作系统的模块化结构,数据库的数据库引擎以及中间件等等都体现着构件化技术。
行业应用软件被认为是中国软件发展的一个机遇。行业应用软件有一个广泛的市场同时又由于其门槛相对较低,国内有很多大大小小的软件公司涉足行业应用软件的开发。一个公司要想从谋求生存转向谋求发展,要想从激烈的竞争中脱颖而出,占据较大的市场份额,必须要针对行业应用软件的特点形成一种有效的开发方式。
传统软件开发方式有两种。一种是项目开发完全从头开始,只借助开发工具和开发库函数;另一种是通过购买并参数化标准软件来提供解决方案。第一种完全定制的方式的开发的软件也许是客户最想要的,但其代价是昂贵的,因此是缺乏竞争力的。而开发一套标准软件当然是一个软件公司梦寐以求的目标,但即使行业应用软件是面向某一特定领域,其过于个性化的特点决定了很难为领域内的所有客户打造一套共用的标准软件。因此行业应用软件的构件化开发是必然的选择。
构件化开发的第一个问题是构件。知识库是一个很好的解决方案。通过对以往开发的软件的共性的内容进行抽取和积累,可以对“知识”进行复用。这里的知识不但包括规模较大的普通意义上的构件,还包括诸如业务实体类这些小的但数量众多的小粒度构件,而这些个性化的部分往往占着很大的工作量。
那如何构建知识库呢?我认为这是最关键的问题,应该结合行业应用软件的特点精心设计。例如可以将知识分类:行业背景知识、术语、业务模型、数据模型等等,但这是远远不够的。在构建知识库之前,必须要制定出特定领域内的标准或者称为规范。可以类比一下CORBA标准,我们知道CORBA的主要目标就是使不同语言、不同实现和不同平台间能进行交互。而我们这里构建知识库的标准的主要目标就是能够简单有效的将行业应用软件的各个组成元素组装成一个整体。也就是说首先要把行业应用软件拆分成各种各样的知识,而且要以一个全新的思路拆分,要认真控制粒度的大小以及它们的相互依赖关系,而且不但要考虑技术层面的问题,更多的是要考虑领域的特点。例如我们可以在行业应用软件的系统架构的基础上来制定标准。假如系统是典型的三层结构UI,BL,DB,知识库构建标准既要对这三层有一个整体的规划,又要详细描述每一层内的具体实现;如DB层的数据模型,BL层的业务模型(包括实体域、流程域等各种各样的模型),至于UI层,它往往是实际编程工作量最大的一层,而这层的标准的制定可能也是最困难的,也是我们这里的标准中最重要的部分,或许JSF给了我们一个思路。标准是开发者创造知识的依据,因此标准的制定者不但要熟悉开发者,而起他们本身就应该是有着丰富编程经验而且有着很高水平的开发者。
有一点需要特别注意,就是在这个标准的规范下构建的知识库并不是提供给第三方,而是公司自己用来开发软件的。因为在行业应用软件开发中,知识库中的知识的创造并不是困难的地方,真正的难点除了标准的制定外,还在于在标准的引导下对知识的使用。这就引出了构件化开发的第二个问题――组装。样本程序是组装的一个很好的解决方案。样本程序的组装方法也要尽量的在标准中说明。通过编写一些典型的样本程序,在行业应用软件的开发过程中可以以样本程序为模板来组装知识。这样开发过程中就不会为新技术所左右,也不会迷惑在各种各样的框架中。
总之,如果一个公司能够在自己多年积累的经验基础上,制定出某一领域的行业应用软件开发标准,在这一标准的约束下来构建知识库和复用知识;那这个公司在该领域内肯定会有很强的竞争力,也就会逐渐形成品牌,发展成一个真正强大的公司。
(本文纯属一家之言,欢迎同行共同讨论)
参考资料:http://blog.csdn.net/zuochun/archive/2007/05/09/1601859.aspx#566628
http://blog.csdn.net/desertman/archive/2007/05/10/1603418.aspx
《构件化软件――超越面向对象编程》