HDNET主要開(kāi)發(fā)方式
一、概述
HDNET:是基于B/S架構(gòu)、以DELPHI為開(kāi)發(fā)語(yǔ)言的開(kāi)發(fā)平臺(tái)。目前基于該平臺(tái)下的主要產(chǎn)品有HDINTRA、HDEC。
HDINTRA概述:海鼎企業(yè)綜合管理系統(tǒng)—HDINTRA,基于Internet技術(shù),采用電子令牌等多種網(wǎng)絡(luò)安全技術(shù)、三層體系結(jié)構(gòu)、組件化開(kāi)發(fā)技術(shù)、基于WEB的工作流定義及資源管理器技術(shù),對(duì)企業(yè)信息資源進(jìn)行有效開(kāi)發(fā)利用,實(shí)現(xiàn)基于WEB的文件交換共享、協(xié)同工作以及業(yè)務(wù)流程管理,包括信息發(fā)布、知識(shí)共享、員工薪資管理、人事管理、財(cái)務(wù)審批等各種功能;調(diào)整企業(yè)組織和業(yè)務(wù)模式,服務(wù)企業(yè)發(fā)展目標(biāo)等。
HDEC概述:海鼎電子商務(wù)系統(tǒng)HDEC,基于Internet技術(shù)、以B2B為核心、適用于零售企業(yè)、供應(yīng)商、客戶之間各流通環(huán)節(jié)進(jìn)行網(wǎng)上定貨、網(wǎng)上對(duì)帳、網(wǎng)上配送、信息增值等業(yè)務(wù)活動(dòng)。實(shí)現(xiàn)并優(yōu)化了零售商、供應(yīng)商、客戶之間端到端的管理,提高作業(yè)效率。
關(guān)于HDNet背景知識(shí),可以翻閱《MESSAGE》第8期中李琦《HDNet之路》。
二、HDNET中的開(kāi)發(fā)方式
在HDNET平臺(tái)下的開(kāi)發(fā)方式有以下兩種:
開(kāi)發(fā)方式一:
這種開(kāi)發(fā)方式開(kāi)發(fā)人員要實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接,界面顯示與業(yè)務(wù)邏輯描述,然后編譯成DLL,通過(guò)調(diào)用來(lái)執(zhí)行相關(guān)操作與顯示。
開(kāi)發(fā)方式二:
這種開(kāi)發(fā)方式是以通用解析引擎來(lái)解析,開(kāi)發(fā)人員只需要寫(xiě)界面顯示與業(yè)務(wù)邏輯的描述,不需要編譯,就可以調(diào)用執(zhí)行。
分別用以上兩種方式實(shí)現(xiàn)內(nèi)部網(wǎng)上的“個(gè)人信息修改”功能為例,
如圖1.3所示:
開(kāi)發(fā)方式一:
實(shí)現(xiàn)這樣的功能要有一個(gè)界面描述文件(HTML文件)及業(yè)務(wù)邏輯描述及PAS操作文件(PAS文件)。
HTML文件(SysUsrSelfInfMod.html):構(gòu)造頁(yè)面的顯示以及一些必要的判斷(如:用戶姓名不能為空、電子郵件格式等)。
PAS文件(SysUsrSelfInfModU.pas, SysUsrSelfInfModSaveU.pas):讀到上面寫(xiě)的HTML文件中的字段,作判斷之后,更新數(shù)據(jù)庫(kù)該條信息。
當(dāng)寫(xiě)好之后,將PAS文件編譯到HDNET.DLL中,這樣在修改“個(gè)人信息”時(shí),調(diào)用HDNET.DLL中SysUsrSelfInfModU.pas來(lái)支持頁(yè)面的顯示,點(diǎn)擊“保存”按鈕時(shí)調(diào)用SysUsrSelfInfModSaveU.pas文件更新數(shù)據(jù)庫(kù)當(dāng)前用戶的信息。
開(kāi)發(fā)方式二:
實(shí)現(xiàn)該功能只需要寫(xiě)界面描述文件(HDT文件)與業(yè)務(wù)描述文件(HDC文件)。
HDT文件(SysUsrSelfInfMod.hdt,SysUsrSelfInfModSave.hdt):構(gòu)造頁(yè)面的顯示以及一些必要的判斷(如:用戶姓名不能為空、電子郵件格式等)。
HDC文件(SysUsrSelfInfModSave.hdc,SysUsrSelfInfModSave.hdc):用來(lái)寫(xiě)頁(yè)面顯示以及更新USR表的SQL語(yǔ)句。
這樣開(kāi)發(fā)工作就已經(jīng)完成了,那它是如何運(yùn)行的呢?它通過(guò)通用解析引擎(ExplainModule.pas)來(lái)解析執(zhí)行, 后面會(huì)對(duì)該引擎作詳細(xì)的解釋,暫時(shí)理解成它可將HDC與HDT文件進(jìn)行解析,實(shí)現(xiàn)將HDC中查詢的結(jié)果用于HDT的顯示,同時(shí)還可以將HDC中的對(duì)表的修改進(jìn)行解析執(zhí)行,更新數(shù)據(jù)庫(kù)當(dāng)前用戶的信息,從而來(lái)實(shí)現(xiàn)“個(gè)人信息修改”的功能。
注:
HDT文件:相當(dāng)于以前的HTML文件, 語(yǔ)法也是HTML文件的語(yǔ)法,只是增加了一些特定的標(biāo)記.
HDC文件:就是一個(gè)INF文件,用于描述完成本功能使用到的SQL語(yǔ)句和其他的一些小信息.
兩種開(kāi)發(fā)方式的比較:
第一種開(kāi)發(fā)方式:
1、 開(kāi)發(fā)難度:對(duì)開(kāi)發(fā)人員要求較高,不僅要寫(xiě)HTML文件,同時(shí)要用DELPHI語(yǔ)言來(lái)寫(xiě)PAS文件,要
實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接等等。
2、 開(kāi)發(fā)效率:由于要考慮底層是如何實(shí)現(xiàn)的,開(kāi)發(fā)完成后還要編譯,這大大降低了開(kāi)發(fā)效率。
3、 實(shí)現(xiàn)業(yè)務(wù)范圍:這種開(kāi)發(fā)方式較靈活,基本上可以實(shí)現(xiàn)所有的開(kāi)發(fā)業(yè)務(wù)。
第二種開(kāi)發(fā)方式:
1、開(kāi)發(fā)難度:對(duì)開(kāi)發(fā)人員要求較低,只要會(huì)寫(xiě)HTML文件以及SQL語(yǔ)句就能在HDNET平臺(tái)下進(jìn)行開(kāi)
發(fā)。
2、 開(kāi)發(fā)效率:由于不需要考慮底層是如何實(shí)現(xiàn)的,只需要跟據(jù)模板的規(guī)則來(lái)編寫(xiě),這樣大大降低了
開(kāi)發(fā)的難度,提高了開(kāi)發(fā)效率。
3、 實(shí)現(xiàn)業(yè)務(wù)范圍:業(yè)務(wù)相對(duì)獨(dú)立,邏輯相對(duì)簡(jiǎn)單。
由于我們目前的業(yè)務(wù)是各種企業(yè)內(nèi)部辦公管理以及電子商務(wù),這些業(yè)務(wù)的共性是各模塊之間相互獨(dú)立,業(yè)務(wù)邏輯也不是很復(fù)雜,第二種開(kāi)發(fā)方式就可以很好的解決,所以“以通用解析引擎為模板的開(kāi)發(fā)方式”就成了當(dāng)前HDNET的主要開(kāi)發(fā)方式。
三、HDNET平臺(tái)主要開(kāi)發(fā)方式
在HDNET平臺(tái)中,我們將現(xiàn)有的業(yè)務(wù)抽象成:模塊、流程、報(bào)表三大業(yè)務(wù),分別有三個(gè)不同的解析引擎來(lái)解析,分別是:ExplainModule、WFFlowPage、RepDisplay。這樣開(kāi)發(fā)人員就可以不需要關(guān)心如何連接數(shù)據(jù)庫(kù),如何將取到的內(nèi)容以何種方式返回到客戶端等等一系列問(wèn)題,可以將工作的重心轉(zhuǎn)移到業(yè)務(wù)邏輯是如何實(shí)現(xiàn)上來(lái)。且開(kāi)發(fā)效率非常高。 開(kāi)發(fā)一個(gè)功能時(shí),只需要分清以何種引擎的解析,就可以很輕松且快速的實(shí)現(xiàn)模塊開(kāi)發(fā)。
四、通用模塊解析引擎(ExplainModule)的詳細(xì)介紹
。ㄒ唬〦xplainModule引擎背景
前面介紹過(guò)在沒(méi)有通用解析引擎之前,我們要實(shí)現(xiàn)模塊的一個(gè)頁(yè)面,需要編寫(xiě)一個(gè)負(fù)責(zé)頁(yè)面顯示的HTML文件,同時(shí)還需要編寫(xiě)一個(gè)包含該頁(yè)面相關(guān)業(yè)務(wù)邏輯的專用Pas解析程序。在這種開(kāi)發(fā)方式下,開(kāi)發(fā)人員每進(jìn)行一個(gè)頁(yè)面的開(kāi)發(fā),都必須要根據(jù)該頁(yè)面業(yè)務(wù)邏輯編寫(xiě)專用的Pas解析程序。這樣一來(lái),開(kāi)發(fā)人員發(fā)現(xiàn)每進(jìn)行一個(gè)模塊的開(kāi)發(fā)都要不斷地為每個(gè)頁(yè)面編寫(xiě)業(yè)務(wù)邏輯不同但結(jié)構(gòu)幾近相同的專用Pas解析程序。同時(shí)業(yè)務(wù)邏輯和Pas解析程序的交雜,使得開(kāi)發(fā)人員在考慮業(yè)務(wù)邏輯的同時(shí),還不得不注意專用Pas解析程序和數(shù)據(jù)庫(kù)的連接問(wèn)題。
2004年我們借鑒Intershop Enfinity的設(shè)計(jì)思想,開(kāi)發(fā)出了一套基于HDNet的通用程序開(kāi)發(fā)模板。該開(kāi)發(fā)模板已經(jīng)開(kāi)始將部分業(yè)務(wù)邏輯從Pas解析程序中分離,通過(guò)改良的頁(yè)面模板語(yǔ)法配合配置文件中大量可定制的SQL語(yǔ)句及相關(guān)元素,利用較為通用的解析引擎對(duì)其進(jìn)行解析,使得模塊開(kāi)發(fā)的時(shí)間大大縮短,程序的修改也變得更加簡(jiǎn)單。“模板化引擎”的編程方式的雛形已形成。但這套模板支持的功能相對(duì)較少,無(wú)法滿足HDNET平臺(tái)下的大部分模塊的開(kāi)發(fā)。
2006年上半年,在求同存異的總結(jié)工作中,我們將業(yè)務(wù)邏輯完全從Pas解析程序中分離開(kāi),開(kāi)發(fā)出了一套更為完善的通用解析模板引擎——ExplainModule解析引擎。在這種開(kāi)發(fā)方式下,開(kāi)發(fā)人員的工作重心發(fā)生了轉(zhuǎn)移,從專用的Pas解析程序轉(zhuǎn)移到業(yè)務(wù)邏輯上,已無(wú)須關(guān)心低層如何與數(shù)據(jù)庫(kù)的交互。“模板化引擎”的編程方式也就應(yīng)用應(yīng)運(yùn)而生了。
。ǘ〦xplainModule引擎的工作原理
ExplainModule引擎負(fù)責(zé)讀取對(duì)應(yīng)的頁(yè)面描述文件(.HDT文件)及業(yè)務(wù)描述文件(.HDC文件),根據(jù)頁(yè)面的相關(guān)業(yè)務(wù)邏輯,負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行交互,構(gòu)造成相應(yīng)的HTML頁(yè)面返回到客戶端顯示。
(三)ExplainModule引擎工作流程如下
用戶在地址欄中請(qǐng)求一個(gè)需要ExplainModule引擎解析的程序;
瀏覽器向服務(wù)器的ExplainModule引擎程序請(qǐng)求這個(gè)程序,而不是像html一樣直接處理一個(gè)自身的html程序,不需要在服務(wù)器上的運(yùn)行;
調(diào)用ExplainModule引擎,根據(jù)顯示文件及配置文件的相關(guān)設(shè)置,解析被申請(qǐng)的文件;當(dāng)遇到相應(yīng)指令中含有訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求,就通過(guò)DbExpress與后臺(tái)數(shù)據(jù)庫(kù)相連,由數(shù)據(jù)庫(kù)訪問(wèn)組件執(zhí)行訪問(wèn)數(shù)據(jù)庫(kù);
再根據(jù)相應(yīng)的顯示文件和配置文件,以及數(shù)據(jù)庫(kù)的結(jié)果集,生成符合HTML語(yǔ)言的網(wǎng)頁(yè),去響應(yīng)用戶的請(qǐng)求。
還是以我們內(nèi)部網(wǎng)上的“個(gè)人信息修改”功能為例
SysUsrSelfInfMod.hdc部分代碼
SysUsrSelfInfMod.hdt部分代碼
以上就是個(gè)人信息修改該頁(yè)面的部分代碼。
我們就是通過(guò).hdc及.hdt文件的組合形成圖1.3所顯示的頁(yè)面,這種方式的好處是將顯示與業(yè)務(wù)邏輯天然地分離開(kāi),HDT文件只考慮顯示,不考慮業(yè)務(wù)邏輯是如何實(shí)現(xiàn)的,而HDC文件只考慮要實(shí)現(xiàn)的業(yè)務(wù)邏輯。
五、總結(jié)
HDNET平臺(tái),目前主要業(yè)務(wù)是各種企業(yè)內(nèi)部辦公管理以及電子商務(wù)。但也有一些業(yè)務(wù)邏輯非常復(fù)雜,各模塊之間的操作影響較大等這些需求,而用這種主要的開(kāi)發(fā)方式就很難實(shí)現(xiàn)了,這時(shí)第一種開(kāi)發(fā)方式就彌補(bǔ)了這個(gè)缺陷。
所以,以通用解析引擎為模板的開(kāi)發(fā)方式為主,以專用PAS解析的開(kāi)發(fā)方式為輔的開(kāi)發(fā)模式就成為當(dāng)前HDNET的開(kāi)發(fā)手段。
六、HDNET平臺(tái)展望
目前在HDNET平臺(tái)上,以前有十幾家企業(yè)的將近三十個(gè)INTRA或EC產(chǎn)品,而且還在不斷發(fā)展新客戶和新產(chǎn)品,而HDNET小組在人員沒(méi)有增加的情況下卻能很好的維護(hù)這些產(chǎn)品,接受他們的日常需求,這應(yīng)該得益于我們目前的這種高效的開(kāi)發(fā)方式,正是由于這樣高效的開(kāi)發(fā)方式,我們不僅有時(shí)間來(lái)維護(hù)客戶的需求,同時(shí)還不斷地改進(jìn)和完善我們的平臺(tái),2006年,我們先后對(duì)平臺(tái)下的核心模塊(如企業(yè)管理、用戶管理、組織管理、人力資源管理等等)進(jìn)行了用通用解析引擎的改造,同時(shí)對(duì)首頁(yè)及菜單進(jìn)行了功能的增強(qiáng),改造之后大大提升了其性能及用戶體驗(yàn)。事實(shí)證明,用這種主要開(kāi)發(fā)方式進(jìn)行改造是成功的。
HDNET平臺(tái),是一個(gè)開(kāi)放的平臺(tái),有很強(qiáng)的擴(kuò)展性,由于我們應(yīng)用的不斷深入,我們對(duì)解析引擎不斷注入新的血液,先后增加了上傳、下載、打印、發(fā)郵件及短信的支持,以及對(duì)新技術(shù)支持的能力,如當(dāng)前平臺(tái)下,已經(jīng)有專門(mén)用來(lái)解析Ajax應(yīng)用程序的ExplainAjax.pas的引擎。由于它的高效性、簡(jiǎn)捷性、以及對(duì)開(kāi)發(fā)人員的要求較低等特性,注定了它會(huì)有很強(qiáng)的生命力。