从事快速开发平台的研发工作已经有七八年了,一直以来都想写些东西,与大家分享一些心得,但始终没有定下心来,也许只是托词,还是惰性在作怪吧。终于在某一天落笔,希望能写出些有价值的内容,供大家参考。不管你是正在考虑使用、还是正在研发或是正在应用快速开发平台,希望本文都能达到抛砖引玉的作用。
快速开发平台的产品有很多,采用的技术及实现方式也各不相同,本文通过剖析“快程业务构建平台”来说明其中的原理和实现。有人可能会认为这是一个广告贴,但本文的目的还是供大家交流和学习,之所以采用“快速业务构建平台”,一是因为作者是该平台的主创人员,可以将快速开发平台中各类问题解释清楚,二是该平台可以免费下载,可供大家学习之用。在这里先提供一下下载地址:http://www.91quick.com。在该网站中可以直接下载Windows绿色免安装版,按照提示运行软件(但不要解压到含有中文的目录中,否则服务将启动不起来,这是已知的BUG),也可以加入QQ群277956211。
本文所讲的快速开发平台的开发目标是指管理软件或称之为数据库软件,其他类型的快速开发平台不在本文的探讨范围之内,但原理是相通的。对于管理软件来讲,它的主要构成可以用下图来表示:
上图为一典型的三层结构。可能有人认为服务器还可以再分为业务逻辑层和数据存储层,对于这个问题可以说是仁者见仁、智者见智,我们暂放一边。可以用一句话来描述管理软件:处理业务对象的存储、转换、查询和展现的计算机软件。所以其中心内容还是业务对象,但业务对象在不同的层中有不同的表现,如服务器中表现为内存对象,如果服务器用Java来实现的话业务对象就表现为Java对象,在客户端中表现为JavaScript对象或其他实现技术的内存对象。而业务逻辑其实也不过是相同内存对象或不同内存对象之间的数据转换而已。最终这些业务对象都将存储为数据库中的表记录。由此我们得出一个管理软件大致需要处理以下五个问题:
1. 如何在数据库中存储业务对象(即定义数据库结构)
2. 如何实现服务器的内存对象与数据库记录之间的相互转换(即实现ORMapping)
3. 如何处理服务器内存对象之间的数据转换(即业务逻辑处理)
4. 如何将服务器内存对象转换为客户端中的内存对象或相反(即客户端与服务端之间的通信与转换协议)
5. 如何向用户展现内存对象(即操作界面)
在传统的开发模式中,所有的问题都需要开发人员一点一点地去完成,例如数据结构的建立,每一个业务对象用一个或多个Table来存储;将业务对象用Java Class(假设服务器由Java代码编写,以下类同)来表示,需要编写Java Class的属性和方法;业务逻辑需要用特定的代码来实现;需要定义服务器与客户端的数据传输协议,是采用Http GET、POST、Ajax还是专用协议;客户端的操作界面,是采用HTML还是WinForm或是其他技术的Windows界面,等等。如此多的问题都需要开发人员一个代码一个代码地去实现,代码完后还要进行大量时间的测试,以验证基础代码是否有问题、业务代码的处理是否正确、界面操作是否合理等。在这个过程中耗费了大量的时间和精力。
当我们沉陷泥潭的时候,再回过头来回顾一下我们一直在写的代码以及上面的5个问题,我们可以发现大量的代码是用于业务对象在各个逻辑层之间的转换,从客户端的内存对象,到服务器的内存对象,最终到数据库记录,这个转换过程其实完全可以自动化。这个数据转换的自动化正是快速开发平台首先要解决的问题。其次是界面,对于管理软件来讲,其界面其实是比较固化的,每一个数据类型都只能对应一个或几个特定的控件,而数据的操作也无非是查询、创建、修改、删除这么几个动作。快速开发平台应该只需要让开发者指定业务对象的属性字段采用什么控件来展示、展示在什么位置等相关信息,而不必去关心这些控件如何来获取数据、如何存储数据、如何转换数据等一系列的问题。以上两点是一个快速开发平台最基本的功能,在以后的篇章中我将由浅入深地来讲解快速开发平台是如何来解决这两个问题的。
仅仅解决数据和展现的问题还不能称是一个快速开发平台,一个完整的快速开发平台还需要解决例如工作流、报表、权限、业务逻辑定义等一系列的问题,当然界面的表现形式也要足够丰富。这里再说明一下快速开发平台和开发工具之间的区别,虽然它们都是用来开发应用软件的,但开发工具在开发完成后需要编译过程,然后才能交付使用,在用户的使用过程中应用软件与开发工具已经完全脱离了;但快速开发平台则不同,不管是开发过程还是使用过程,应用软件与快速开发平台始终是捆绑在一起的,当然应用软件可以在同一版本的快速开发平台之间相互迁移,如果不具备这个功能,那么这个快速开发平台是不完整的。那么为何应用软件在运行时必须和快速开发平台捆绑在一起呢?这与快速开发平台的原理密不可分。但同时这个捆绑的关系也带来了另外一个好处——让应用软件更快地适应需求的变化,在一个采用快速开发平台的应用软件中大部分的需求变化可能只需要在几分钟之内就可以解决了,这正是我们采用快速开发平台的价值所在。
----未完,待续...----