HDNET主要开发方式
一、概述
HDNET:是基于B/S架构、以DELPHI为开发语言的开发平台。目前基于该平台下的主要产品有HDINTRA、HDEC。
HDINTRA概述:海鼎企业综合管理系统—HDINTRA,基于Internet技术,采用电子令牌等多种网络安全技术、三层体系结构、组件化开发技术、基于WEB的工作流定义及资源管理器技术,对企业信息资源进行有效开发利用,实现基于WEB的文件交换共享、协同工作以及业务流程管理,包括信息发布、知识共享、员工薪资管理、人事管理、财务审批等各种功能;调整企业组织和业务模式,服务企业发展目标等。
HDEC概述:海鼎电子商务系统HDEC,基于Internet技术、以B2B为核心、适用于零售企业、供应商、客户之间各流通环节进行网上定货、网上对帐、网上配送、信息增值等业务活动。实现并优化了零售商、供应商、客户之间端到端的管理,提高作业效率。
关于HDNet背景知识,可以翻阅《MESSAGE》第8期中李琦《HDNet之路》。
二、HDNET中的开发方式
在HDNET平台下的开发方式有以下两种:
开发方式一:
这种开发方式开发人员要实现与数据库的连接,界面显示与业务逻辑描述,然后编译成DLL,通过调用来执行相关操作与显示。
开发方式二:
这种开发方式是以通用解析引擎来解析,开发人员只需要写界面显示与业务逻辑的描述,不需要编译,就可以调用执行。
分别用以上两种方式实现内部网上的“个人信息修改”功能为例,
如图1.3所示:
开发方式一:
实现这样的功能要有一个界面描述文件(HTML文件)及业务逻辑描述及PAS操作文件(PAS文件)。
HTML文件(SysUsrSelfInfMod.html):构造页面的显示以及一些必要的判断(如:用户姓名不能为空、电子邮件格式等)。
PAS文件(SysUsrSelfInfModU.pas, SysUsrSelfInfModSaveU.pas):读到上面写的HTML文件中的字段,作判断之后,更新数据库该条信息。
当写好之后,将PAS文件编译到HDNET.DLL中,这样在修改“个人信息”时,调用HDNET.DLL中SysUsrSelfInfModU.pas来支持页面的显示,点击“保存”按钮时调用SysUsrSelfInfModSaveU.pas文件更新数据库当前用户的信息。
开发方式二:
实现该功能只需要写界面描述文件(HDT文件)与业务描述文件(HDC文件)。
HDT文件(SysUsrSelfInfMod.hdt,SysUsrSelfInfModSave.hdt):构造页面的显示以及一些必要的判断(如:用户姓名不能为空、电子邮件格式等)。
HDC文件(SysUsrSelfInfModSave.hdc,SysUsrSelfInfModSave.hdc):用来写页面显示以及更新USR表的SQL语句。
这样开发工作就已经完成了,那它是如何运行的呢?它通过通用解析引擎(ExplainModule.pas)来解析执行, 后面会对该引擎作详细的解释,暂时理解成它可将HDC与HDT文件进行解析,实现将HDC中查询的结果用于HDT的显示,同时还可以将HDC中的对表的修改进行解析执行,更新数据库当前用户的信息,从而来实现“个人信息修改”的功能。
注:
HDT文件:相当于以前的HTML文件, 语法也是HTML文件的语法,只是增加了一些特定的标记.
HDC文件:就是一个INF文件,用于描述完成本功能使用到的SQL语句和其他的一些小信息.
两种开发方式的比较:
第一种开发方式:
1、 开发难度:对开发人员要求较高,不仅要写HTML文件,同时要用DELPHI语言来写PAS文件,要
实现与数据库的连接等等。
2、 开发效率:由于要考虑底层是如何实现的,开发完成后还要编译,这大大降低了开发效率。
3、 实现业务范围:这种开发方式较灵活,基本上可以实现所有的开发业务。
第二种开发方式:
1、开发难度:对开发人员要求较低,只要会写HTML文件以及SQL语句就能在HDNET平台下进行开
发。
2、 开发效率:由于不需要考虑底层是如何实现的,只需要跟据模板的规则来编写,这样大大降低了
开发的难度,提高了开发效率。
3、 实现业务范围:业务相对独立,逻辑相对简单。
由于我们目前的业务是各种企业内部办公管理以及电子商务,这些业务的共性是各模块之间相互独立,业务逻辑也不是很复杂,第二种开发方式就可以很好的解决,所以“以通用解析引擎为模板的开发方式”就成了当前HDNET的主要开发方式。
三、HDNET平台主要开发方式
在HDNET平台中,我们将现有的业务抽象成:模块、流程、报表三大业务,分别有三个不同的解析引擎来解析,分别是:ExplainModule、WFFlowPage、RepDisplay。这样开发人员就可以不需要关心如何连接数据库,如何将取到的内容以何种方式返回到客户端等等一系列问题,可以将工作的重心转移到业务逻辑是如何实现上来。且开发效率非常高。 开发一个功能时,只需要分清以何种引擎的解析,就可以很轻松且快速的实现模块开发。
四、通用模块解析引擎(ExplainModule)的详细介绍
(一)ExplainModule引擎背景
前面介绍过在没有通用解析引擎之前,我们要实现模块的一个页面,需要编写一个负责页面显示的HTML文件,同时还需要编写一个包含该页面相关业务逻辑的专用Pas解析程序。在这种开发方式下,开发人员每进行一个页面的开发,都必须要根据该页面业务逻辑编写专用的Pas解析程序。这样一来,开发人员发现每进行一个模块的开发都要不断地为每个页面编写业务逻辑不同但结构几近相同的专用Pas解析程序。同时业务逻辑和Pas解析程序的交杂,使得开发人员在考虑业务逻辑的同时,还不得不注意专用Pas解析程序和数据库的连接问题。
2004年我们借鉴Intershop Enfinity的设计思想,开发出了一套基于HDNet的通用程序开发模板。该开发模板已经开始将部分业务逻辑从Pas解析程序中分离,通过改良的页面模板语法配合配置文件中大量可定制的SQL语句及相关元素,利用较为通用的解析引擎对其进行解析,使得模块开发的时间大大缩短,程序的修改也变得更加简单。“模板化引擎”的编程方式的雏形已形成。但这套模板支持的功能相对较少,无法满足HDNET平台下的大部分模块的开发。
2006年上半年,在求同存异的总结工作中,我们将业务逻辑完全从Pas解析程序中分离开,开发出了一套更为完善的通用解析模板引擎——ExplainModule解析引擎。在这种开发方式下,开发人员的工作重心发生了转移,从专用的Pas解析程序转移到业务逻辑上,已无须关心低层如何与数据库的交互。“模板化引擎”的编程方式也就应用应运而生了。
(二)ExplainModule引擎的工作原理
ExplainModule引擎负责读取对应的页面描述文件(.HDT文件)及业务描述文件(.HDC文件),根据页面的相关业务逻辑,负责与数据库进行交互,构造成相应的HTML页面返回到客户端显示。
(三)ExplainModule引擎工作流程如下
用户在地址栏中请求一个需要ExplainModule引擎解析的程序;
浏览器向服务器的ExplainModule引擎程序请求这个程序,而不是像html一样直接处理一个自身的html程序,不需要在服务器上的运行;
调用ExplainModule引擎,根据显示文件及配置文件的相关设置,解析被申请的文件;当遇到相应指令中含有访问数据库的请求,就通过DbExpress与后台数据库相连,由数据库访问组件执行访问数据库;
再根据相应的显示文件和配置文件,以及数据库的结果集,生成符合HTML语言的网页,去响应用户的请求。
还是以我们内部网上的“个人信息修改”功能为例
SysUsrSelfInfMod.hdc部分代码
SysUsrSelfInfMod.hdt部分代码
以上就是个人信息修改该页面的部分代码。
我们就是通过.hdc及.hdt文件的组合形成图1.3所显示的页面,这种方式的好处是将显示与业务逻辑天然地分离开,HDT文件只考虑显示,不考虑业务逻辑是如何实现的,而HDC文件只考虑要实现的业务逻辑。
五、总结
HDNET平台,目前主要业务是各种企业内部办公管理以及电子商务。但也有一些业务逻辑非常复杂,各模块之间的操作影响较大等这些需求,而用这种主要的开发方式就很难实现了,这时第一种开发方式就弥补了这个缺陷。
所以,以通用解析引擎为模板的开发方式为主,以专用PAS解析的开发方式为辅的开发模式就成为当前HDNET的开发手段。
六、HDNET平台展望
目前在HDNET平台上,以前有十几家企业的将近三十个INTRA或EC产品,而且还在不断发展新客户和新产品,而HDNET小组在人员没有增加的情况下却能很好的维护这些产品,接受他们的日常需求,这应该得益于我们目前的这种高效的开发方式,正是由于这样高效的开发方式,我们不仅有时间来维护客户的需求,同时还不断地改进和完善我们的平台,2006年,我们先后对平台下的核心模块(如企业管理、用户管理、组织管理、人力资源管理等等)进行了用通用解析引擎的改造,同时对首页及菜单进行了功能的增强,改造之后大大提升了其性能及用户体验。事实证明,用这种主要开发方式进行改造是成功的。
HDNET平台,是一个开放的平台,有很强的扩展性,由于我们应用的不断深入,我们对解析引擎不断注入新的血液,先后增加了上传、下载、打印、发邮件及短信的支持,以及对新技术支持的能力,如当前平台下,已经有专门用来解析Ajax应用程序的ExplainAjax.pas的引擎。由于它的高效性、简捷性、以及对开发人员的要求较低等特性,注定了它会有很强的生命力。