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的引擎。由于它的高效性、簡捷性、以及對開發人員的要求較低等特性,注定了它會有很強的生命力。