李維佳 汪洪江
(1中國(guó)電子科技集團(tuán)公司第五十四研究所,河北 石家莊 050002)
(2遼寧省高中等教育考試招生委員會(huì)辦公室,遼寧 沈陽(yáng) 110031)
基于ASP.NET的Web表單自動(dòng)生成引擎
李維佳1汪洪江2
(1中國(guó)電子科技集團(tuán)公司第五十四研究所,河北石家莊050002)
(2遼寧省高中等教育考試招生委員會(huì)辦公室,遼寧沈陽(yáng)110031)
針對(duì)信息系統(tǒng)開(kāi)發(fā)中Web表單頁(yè)面開(kāi)發(fā)工作量大、重復(fù)性高和內(nèi)容結(jié)構(gòu)相似的特點(diǎn),提出了一種基于ASP.NET的自定義頁(yè)面生成引擎。該引擎基于XML格式的配置文件動(dòng)態(tài)生成Web表單頁(yè)面,同時(shí)提供對(duì)表單的設(shè)計(jì)、展示、讀取和操作的支持。在實(shí)際應(yīng)用中,該引擎有效降低了信息系統(tǒng)開(kāi)發(fā)和維護(hù)成本,且由于引擎表單元素重用的特點(diǎn),引擎生成的Web表單頁(yè)面具有很高的穩(wěn)定性。
ASP.NET 自定義頁(yè)面 自動(dòng)生成引擎
在企業(yè)信息化飛速發(fā)展的進(jìn)程中,企業(yè)對(duì)于信息系統(tǒng)的功能要求越來(lái)越高。信息系統(tǒng)開(kāi)發(fā)中通常會(huì)遇到一個(gè)令開(kāi)發(fā)者頭疼的問(wèn)題,就是需求是不斷變化的,而最常見(jiàn)的是對(duì)表單數(shù)據(jù)項(xiàng)的更改。傳統(tǒng)的表單開(kāi)發(fā)方法,是將定制好的表單以硬編碼的方式固化在系統(tǒng)中。當(dāng)業(yè)務(wù)需求發(fā)生變更時(shí),必須對(duì)原來(lái)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)及功能進(jìn)行代碼級(jí)的改動(dòng)。每次需求變化都要更改程序,更改數(shù)據(jù)庫(kù)表結(jié)構(gòu),重新對(duì)程序進(jìn)行測(cè)試,工作量大,導(dǎo)致系統(tǒng)不易維護(hù)[1]。如果表單數(shù)據(jù)項(xiàng)變化,只更改表單配置文件,而不更改底層代碼和數(shù)據(jù)底表,系統(tǒng)會(huì)變得更易維護(hù)。因此本文設(shè)計(jì)和實(shí)現(xiàn)了基于ASP.NET的Web表單自動(dòng)生成引擎。該引擎首先解析XML格式的Web表單內(nèi)容配置文件,動(dòng)態(tài)生成表單元素并將其添加到Web表單中。實(shí)際應(yīng)用表明,該引擎有效降低了信息系統(tǒng)開(kāi)發(fā)和維護(hù)成本。
2.1Asp.NET技術(shù)
ASP.NET是由微軟在.NET框架中提供,用來(lái)開(kāi)發(fā)Web應(yīng)用程序的類(lèi)庫(kù),包含在System.Web命名空間中,并提供網(wǎng)頁(yè)處理、擴(kuò)充以及HTTP通道的應(yīng)用程序和通信處理等工作[2]。嚴(yán)格意義上講,ASP.NET并不是一門(mén)編程語(yǔ)言,是有.NET提供的開(kāi)發(fā)平臺(tái)。
在ASP.NET運(yùn)行的時(shí)候,經(jīng)常會(huì)有網(wǎng)頁(yè)的來(lái)回動(dòng)作(round-trip),在ASP.NET中稱(chēng)為PostBack。開(kāi)發(fā)人員可以用Page.IsPostBack來(lái)判斷是否為第一次運(yùn)行,它可以保證ASP. NET的控件事件只會(huì)運(yùn)行一次,客戶(hù)端和服務(wù)器之間的通訊是無(wú)狀態(tài)的和斷續(xù)的[3]。但是為了保證用戶(hù)體驗(yàn),需要使用戶(hù)感覺(jué)到這是一個(gè)連續(xù)執(zhí)行的過(guò)程。為了獲得連續(xù)性效果,頁(yè)面開(kāi)發(fā)人員必須知道頁(yè)面的執(zhí)行順序。開(kāi)發(fā)人員需要了解:在頁(yè)面生命周期的各個(gè)階段,可以進(jìn)行哪些操作,頁(yè)面生命周期中各階段的概述如表1所示。
表1 ASP.NET頁(yè)面生命周期
2.2Web表單
Web表單相當(dāng)于傳統(tǒng)Web頁(yè)面,二者之間的區(qū)別在于Web表單的所有頁(yè)面元素是由表單元素構(gòu)成的,可以說(shuō)Web表單是由表單元素所構(gòu)成的集合[4]。在企業(yè)信息系統(tǒng)中,Web表單與企業(yè)的業(yè)務(wù)流程相關(guān),是企業(yè)中的紙質(zhì)流程單的電子化表現(xiàn),一般用于收集和展示用戶(hù)填寫(xiě)的各種數(shù)據(jù)[5],如圖1所示。Web表單通常由兩部分組成:表頭和列表。表頭用來(lái)描述該表單的總體信息,例如:名稱(chēng)、編號(hào)和負(fù)責(zé)人等信息。列表用來(lái)展示表單細(xì)節(jié),例如:處理流程及每步流程的處理細(xì)節(jié)。表單元素是組成Web表單的基本單元,它是一個(gè)抽象的概念,用于描述用戶(hù)填寫(xiě)的一個(gè)數(shù)據(jù)項(xiàng),而具體的實(shí)現(xiàn)是通過(guò)ASP.NET中的Web服務(wù)器控件來(lái)表示的。
圖1 Web表單示例
3.1設(shè)計(jì)思想
通過(guò)總結(jié)企業(yè)信息系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)可以發(fā)現(xiàn),Web表單是系統(tǒng)開(kāi)發(fā)的核心。Web表單主要有2個(gè)用途:收集和展示數(shù)據(jù)。B/S架構(gòu)的系統(tǒng)中:數(shù)據(jù)收集通過(guò)HTML頁(yè)面輸入元素(例如:文本框和下拉列表)并配合彈窗等動(dòng)作完成;數(shù)據(jù)展示則通過(guò)HTML頁(yè)面元素配合表格(例如:Table和GridView)的方式;Web表單還需要支持對(duì)數(shù)據(jù)的增刪改等操作。信息系統(tǒng)中包含大量的Web表單,對(duì)這些表單內(nèi)容進(jìn)一步分析發(fā)現(xiàn):不同的Web表單在數(shù)據(jù)內(nèi)容和結(jié)構(gòu)上具有很高的相似度,只是在某些屬性上有所取舍而形成了不同的表單。
現(xiàn)有的開(kāi)發(fā)方式是為這些大體相同的表單開(kāi)發(fā)不同的Web頁(yè)面。在實(shí)際應(yīng)用中,系統(tǒng)的需求和數(shù)據(jù)的結(jié)構(gòu)會(huì)較為頻繁的變化。Web表單是根據(jù)數(shù)據(jù)表的列來(lái)設(shè)計(jì)和實(shí)現(xiàn)的,用戶(hù)要填寫(xiě)對(duì)應(yīng)于數(shù)據(jù)表列的信息,所以數(shù)據(jù)結(jié)構(gòu)的變化,必然導(dǎo)致Web表單的改變。這些變化為系統(tǒng)開(kāi)發(fā)和維護(hù)人員帶來(lái)了大量的重復(fù)性勞動(dòng)。為了減少這種重復(fù)低效的工作,設(shè)計(jì)和實(shí)現(xiàn)了基于ASP.NET的Web表單自動(dòng)生成引擎。該引擎在統(tǒng)一的Web表單框架的基礎(chǔ)上,通過(guò)讀取不同的配置文件,生成不同的Web表單。另外Web表單是信息系統(tǒng)的重要組成部分,所以引擎考慮了與現(xiàn)有開(kāi)發(fā)環(huán)境的集成,可以方便快捷地嵌入ASP.NET環(huán)境中,最后引擎還可以靈活調(diào)整以適應(yīng)實(shí)際應(yīng)用中的復(fù)雜情景。
3.2設(shè)計(jì)方案
Web表單的用途是對(duì)數(shù)據(jù)的收集和展示,因此引擎在整體設(shè)計(jì)上借鑒了信息系統(tǒng)的設(shè)計(jì)思路采用經(jīng)典MVC(Model、View和Control)三層架構(gòu),如圖2所示。
圖2 引擎架構(gòu)示意圖
Model層負(fù)責(zé)解析表單配置文件,并將配置信息提供給View層和Control層。每個(gè)Web表單對(duì)應(yīng)2個(gè)XML格式的配置文件(SheetHeader和SheetDetail),分別描述表單的表頭和列表部分。SheetHeader將具有數(shù)據(jù)采集功能的表單元素(文本框、下拉列表和彈出選擇窗口等)與數(shù)據(jù)庫(kù)中對(duì)應(yīng)表的字段建立聯(lián)系。SheetDetail將列Table中的列與數(shù)據(jù)庫(kù)中對(duì)應(yīng)的字段建立聯(lián)系。Control層負(fù)責(zé)表單元素的動(dòng)態(tài)生成及操作。Web表單的表頭和列表分別動(dòng)態(tài)生成:在生成表頭時(shí),根據(jù)Model層提供的表單元素詳細(xì)信息,動(dòng)態(tài)生成表單元素并添加到Web頁(yè)面中;生成列表時(shí)引擎將從數(shù)據(jù)庫(kù)中獲取的數(shù)據(jù)添加到網(wǎng)頁(yè)Table中對(duì)應(yīng)的字段。Control層對(duì)表單元素的操作包括讀取用戶(hù)輸入和將數(shù)據(jù)庫(kù)中的值賦值到對(duì)應(yīng)的表單元素中。
View層負(fù)責(zé)將引擎生成的Web表單頁(yè)面調(diào)整到用戶(hù)最終見(jiàn)到的效果。Control層生成的Web表單沒(méi)有格式,只是將Web表單所需的元素羅列到頁(yè)面中。View層按照配置文件的描述對(duì)表單元素進(jìn)行排序和格式化,并添加用戶(hù)輸入驗(yàn)證。最后再根據(jù)信息系統(tǒng)的界面風(fēng)格,采用對(duì)應(yīng)的布局文件美化頁(yè)面,提高用戶(hù)體驗(yàn)。View層處理前后如圖3所示。
圖3 View層處理前后對(duì)比
4.1表單對(duì)象抽象
圖4 Workitem和Worksheet E-R圖
目前信息系統(tǒng)開(kāi)發(fā)在數(shù)據(jù)層通常采用ORM工具來(lái)建立程序操作的對(duì)象和數(shù)據(jù)庫(kù)中的表之間的應(yīng)關(guān)系。同時(shí)引擎的目的是通過(guò)修改配置文件的方式來(lái)滿(mǎn)足系統(tǒng)需求的更改,從而降低甚至避免修改數(shù)據(jù)庫(kù)表結(jié)構(gòu)、程序代碼和重新測(cè)試所帶來(lái)的高昂成本。因此結(jié)合數(shù)據(jù)庫(kù)和信息系統(tǒng)的實(shí)際應(yīng)用特點(diǎn),對(duì)所有的類(lèi)型的表單進(jìn)行分析,抽象并建立統(tǒng)一的表單對(duì)象,并以此為依據(jù)在數(shù)據(jù)庫(kù)中創(chuàng)建實(shí)體對(duì)象表。以制造執(zhí)行系統(tǒng)中的Web表單(圖1所示)為例,結(jié)合Model層的設(shè)計(jì)方式,表單對(duì)象也由Worksheet(表頭對(duì)象)和Workitem(列表對(duì)象)兩部分組成。綜合分析在實(shí)際中各種場(chǎng)景下的應(yīng)用對(duì)2個(gè)對(duì)象進(jìn)行建模,同時(shí)為后期需求或某些特殊應(yīng)用預(yù)留若干屬性。該表單對(duì)象對(duì)應(yīng)的數(shù)據(jù)庫(kù)E-R圖如圖4所示。
4.2配置文件設(shè)計(jì)
表單的生成和最終頁(yè)面的展現(xiàn)都基于配置文件,同時(shí)表單是由表單元素組成,因此配置文件需要能夠準(zhǔn)確和完整地描述Web表單中的表單元素,其中幾個(gè)常用關(guān)鍵屬性如表2所示。一個(gè)表單由Worksheet和Workitem兩種對(duì)象組成。2種對(duì)象通過(guò)對(duì)同一配置文件采用不同的解析方式可以得到不同的表單對(duì)象,增加了表單的復(fù)用性,減少了配置文件數(shù)量,提高了利用率。
表2 表單元素關(guān)鍵屬性
4.3信息采集表單元素實(shí)現(xiàn)
信息采集是Web表單的一項(xiàng)重要功能。根據(jù)業(yè)務(wù)需求不同,數(shù)據(jù)錄入形式多種多樣。通過(guò)分析信息系統(tǒng)中的表單數(shù)據(jù)錄入的方式和特點(diǎn),總結(jié)出了5種常用的信息采集表單元素。針對(duì)這5種表單元素引擎采用設(shè)計(jì)模式中的抽象工廠(chǎng)方式[6],根據(jù)配置文件向頁(yè)面動(dòng)態(tài)創(chuàng)建并添加到Web表單中,設(shè)計(jì)UML圖,如圖5所示。IFormElement包含了表單對(duì)象的創(chuàng)建、賦值和取值等操作,各表單元素類(lèi)實(shí)現(xiàn)該接口,并通過(guò)反射+配置文件的方式向IFormElement接口編程。通過(guò)該方式可以在后續(xù)開(kāi)發(fā)中靈活的增加表單元素類(lèi)型,逐步完善該引擎。
圖5 表單元素UML圖
4.4頁(yè)面排版
頁(yè)面排版用JavaScript實(shí)現(xiàn),引擎所生成Web表單元素是以HTML格式呈現(xiàn)給系統(tǒng)用戶(hù)。引擎對(duì)HTML中的元素ID是按照預(yù)先定義好的規(guī)則命名。根據(jù)不同信息系統(tǒng)的界面和排版風(fēng)格,在瀏覽器端對(duì)符合規(guī)則的HTML元素進(jìn)行排版。這種處理方式使引擎具有如下優(yōu)點(diǎn):降低了實(shí)現(xiàn)難度和代碼復(fù)雜度、保證了引擎的適應(yīng)性及提高系統(tǒng)運(yùn)行效率。
4.5數(shù)據(jù)操作策略
引擎對(duì)Web表單的操作分為4種類(lèi)型:添加表單元素、設(shè)置表單元素?cái)?shù)據(jù)、讀取表單元素?cái)?shù)據(jù)和修改表單元素?cái)?shù)據(jù)。結(jié)合表單操作類(lèi)型和ASP.NET頁(yè)面生命周期特點(diǎn),引擎采用不同的策略:①添加表單元素在Web表單所在頁(yè)面的OnInit()方法中完成;②設(shè)置表單元素?cái)?shù)據(jù)在頁(yè)面的OnLoad()方法中完成;③讀取表單元素?cái)?shù)據(jù)在頁(yè)面對(duì)應(yīng)的動(dòng)作事件(如按鈕點(diǎn)擊等)中完成;④修改表單元素?cái)?shù)據(jù)在頁(yè)面動(dòng)作事件結(jié)合彈窗操作來(lái)完成。
目前該引擎已經(jīng)應(yīng)用到某制造執(zhí)行系統(tǒng)的開(kāi)發(fā)中,通過(guò)引擎+配置文件的方式,滿(mǎn)足了該系統(tǒng)6種類(lèi)型表單的創(chuàng)建、編輯、錄入和展示的功能需求。同時(shí)該引擎也可以靈活應(yīng)對(duì)客戶(hù)需求不確定的特點(diǎn),大大縮短了Web表單開(kāi)發(fā)時(shí)間,在后續(xù)工作中會(huì)不斷增加引擎所支持的表單元素類(lèi)型,以滿(mǎn)足更多的系統(tǒng)需求。
[1]吳賀,及俊川,李新,等.基于XML的動(dòng)態(tài)表單快速生成技術(shù)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010(9):60-63.
[2]Worley S.ASP.NET技術(shù)內(nèi)幕[M].北京:人民郵電出版社,2002.
[3]李明剛,肖建.ASP.NET Web站點(diǎn)高級(jí)編程范例[M].北京,清華大學(xué)出版社,2004.
[4]林向.Web表單可視化定制原理研究[J].電腦開(kāi)發(fā)與應(yīng)用. 2013(6):34-36.
[5]徐鵬,王克宏.基于Browser/Webserver模式的電子表單系統(tǒng)[J].計(jì)算機(jī)科學(xué).2001(1):106-110.
[6]程杰.大話(huà)設(shè)計(jì)模式[M].北京:清華大學(xué)出版社,2008.
An Automatic Generation Engine for Web Form Based on ASP. NET
LI Wei-jia1,WANG Hong-jiang2
(1 The 54th Research Institute of CETC,Shijiazhuang Hebei 050081,China)
(2 Office,Liaoning Enrollment and Examination Commission of Higher and Secondary Education,Shenyang Liaoning 110031,China)
Aiming at the characteristics of high workload,high repeatability and similar structure in web forms development,this paper puts forward an automatic generation engine for web form based on ASP.Net.This engine generates web form page dynamically based on XML configuration file.At the same time it provides such capabilities as form design,display,read and operation.In practical applications,the engine can significantly reduce the cost of development and maintenance for information system.Besides,because of the characteristic of reuse,the web forms generated by the engine have higher stability.
ASP.NET;custom webpage;automatic generation engine
TP311
A
1008-1739(2015)17-60-4
定稿日期:2015-08-12