電子表單系列談之表單數(shù)據(jù)處理
一般的電子表單工具都要求能自動(dòng)顯示和保存關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù),比如可以使用SQL語(yǔ)句查詢數(shù)據(jù)填充文本框,或者查詢一批數(shù)據(jù)填充到列表框中的列表項(xiàng)目。而且還要求能更新數(shù)據(jù)庫(kù),能把用戶輸入的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,可以新增,修改和刪除數(shù)據(jù)庫(kù)記錄。為實(shí)現(xiàn)這種功能,表單工具在定制表單模板的時(shí)候得設(shè)置讀取數(shù)據(jù)和更新數(shù)據(jù)庫(kù)用的SQL語(yǔ)句,或者設(shè)置表單數(shù)據(jù)輸入元素和數(shù)據(jù)庫(kù)字段的映射關(guān)系,運(yùn)行時(shí)得直接連接數(shù)據(jù)庫(kù),執(zhí)行SQL更新語(yǔ)句更新數(shù)據(jù)。但隨著時(shí)代的進(jìn)步,這種做法在開(kāi)發(fā)和運(yùn)行中暴露出一些問(wèn)題。
對(duì)于目前的比較龐大而復(fù)雜的信息管理系統(tǒng),很多系統(tǒng)都采用三層架構(gòu)或多層結(jié)構(gòu),此處只討論有代表性的三層架構(gòu)。在三層架構(gòu)中,程序代碼根據(jù)功能分為三個(gè)大部分,數(shù)據(jù)庫(kù)處理層,業(yè)務(wù)邏輯層和數(shù)據(jù)顯示層(用戶界面層)。其中數(shù)據(jù)庫(kù)處理層專門(mén)處理底層數(shù)據(jù)庫(kù),維護(hù)基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)。業(yè)務(wù)邏輯層則調(diào)用數(shù)據(jù)庫(kù)層獲得數(shù)據(jù)并根據(jù)需要進(jìn)行處理,而數(shù)據(jù)顯示層則從業(yè)務(wù)邏輯層獲得數(shù)據(jù)并顯示出來(lái)。
這種三層架構(gòu)結(jié)構(gòu)復(fù)雜,但程序靈活,適于團(tuán)體開(kāi)發(fā),而且維護(hù)簡(jiǎn)單,能比較方便的控制數(shù)據(jù)訪問(wèn)的安全和限制,因此三層結(jié)構(gòu)目前有很大的影響力。對(duì)于三層的數(shù)據(jù)庫(kù)信息管理系統(tǒng),只有數(shù)據(jù)處理層能直接訪問(wèn)數(shù)據(jù)庫(kù),其他的程序模塊是不能的。
電子表單工具是用來(lái)顯示和輸入數(shù)據(jù)的,從功能上說(shuō)應(yīng)當(dāng)是三層結(jié)構(gòu)中的用戶界面層,它應(yīng)當(dāng)只能從業(yè)務(wù)邏輯層獲得數(shù)據(jù),不應(yīng)當(dāng)從數(shù)據(jù)庫(kù)層獲直接連接數(shù)據(jù)庫(kù)獲得數(shù)據(jù)的,更不應(yīng)當(dāng)跳過(guò)業(yè)務(wù)邏輯層來(lái)直接更新數(shù)據(jù)庫(kù)。但目前一些表單工具卻如此這樣作,破壞了三層結(jié)構(gòu)的原本的意義。一般來(lái)說(shuō),用戶界面層直接查詢數(shù)據(jù)庫(kù)獲得數(shù)據(jù),只是影響了三層結(jié)構(gòu),數(shù)據(jù)庫(kù)結(jié)構(gòu)發(fā)生改變,而用戶界面層沒(méi)有隨之更新,則最多只是不能正確的顯示數(shù)據(jù),沒(méi)有其他的影響;但用戶界面層直接更新數(shù)據(jù)庫(kù),新增修改或刪除數(shù)據(jù)庫(kù)記錄,這應(yīng)當(dāng)是破壞了三層結(jié)構(gòu),當(dāng)數(shù)據(jù)庫(kù)結(jié)構(gòu)發(fā)生改變而用戶界面層沒(méi)有隨之更新,則用戶界面層可能會(huì)破壞數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)錯(cuò)誤和數(shù)據(jù)丟失。對(duì)于客戶而言,最重要的是數(shù)據(jù)而不是應(yīng)用系統(tǒng),應(yīng)用系統(tǒng)可以更換,可以崩潰,但數(shù)據(jù)絕不能錯(cuò)誤或丟失。因此從客戶的利益和軟件的安全性著想,使用電子表單工具直接更新數(shù)據(jù)庫(kù)應(yīng)當(dāng)慎重考慮。
一些電子表單工具具備能自動(dòng)更新數(shù)據(jù)庫(kù)記錄的功能,但在現(xiàn)在的軟件開(kāi)發(fā)過(guò)程中,這種功能要求日漸不重要。這是因?yàn)樵蕉嘣蕉嗟拈_(kāi)發(fā)人員使用各種成熟的對(duì)象-數(shù)據(jù)庫(kù)映射框架,或者使用各種代碼生成器來(lái)生成操作低層數(shù)據(jù)庫(kù)的代碼,而且各個(gè)公司對(duì)此有各自的規(guī)范和傳統(tǒng),表單工具不應(yīng)對(duì)此進(jìn)行過(guò)多的干涉。
綜上所述,表單工具是處于用戶界面,用于顯示和輸入數(shù)據(jù)的,在三層架構(gòu)中屬于用戶界面層,按照三層架構(gòu)的基本規(guī)范,用戶界面層是不能直接讀取和更新底層數(shù)據(jù)庫(kù)的。因此電子表單不應(yīng)當(dāng)直接更新數(shù)據(jù)庫(kù),而是向三層架構(gòu)的業(yè)務(wù)邏輯層提供數(shù)據(jù)。
此處表單工具使用XML文檔和應(yīng)用系統(tǒng)交換表單數(shù)據(jù),應(yīng)用系統(tǒng)將需要顯示的數(shù)據(jù)組織成一個(gè)XML文檔,然后傳遞給表單工具用戶界面,在用戶界面中,用戶確認(rèn)輸入表單數(shù)據(jù)后,表單工具將表單數(shù)據(jù)組織成一個(gè)XML文檔返回給應(yīng)用系統(tǒng),應(yīng)用系統(tǒng)將進(jìn)行后續(xù)處理。
在表單文檔中,每一個(gè)可以輸入數(shù)據(jù)的表單元素都有一個(gè)“數(shù)據(jù)引用“的屬性,該屬性就說(shuō)明了表單工具如何保存在XML文檔中。該屬性的格式類似XPath字符串,可以包含多個(gè)XML節(jié)點(diǎn)名稱,名稱之間由”/”分隔開(kāi)來(lái)。
比如對(duì)于一個(gè)文本框,若數(shù)據(jù)引用為”Employees/Address”,則表單數(shù)據(jù)保存在XML文檔根節(jié)點(diǎn)的名為Employess子節(jié)點(diǎn)的名為Address的子節(jié)點(diǎn)下。生成的XML片斷可能為
<Employees>
<Address>文本值</Address>
</Employees>
</XFormValue>
若這個(gè)文本框的數(shù)據(jù)引用為”Employees/@Address”,則表單數(shù)據(jù)保存在XML文檔根節(jié)點(diǎn)的名為Employess的子節(jié)點(diǎn)的名為Address的屬性中。此時(shí)生成的XML片斷可能為
<Employees Address=”文本值” />
</XFormValue>
注意,這里的數(shù)據(jù)引用是模擬XPath的,不是真的XPath,只能設(shè)置各級(jí)XML元素的名稱,若出現(xiàn)XML屬性則放置在最后,而且沒(méi)有判斷條件。
在實(shí)際應(yīng)用中,使用電子表單的最終目的一般是顯示和編輯數(shù)據(jù)庫(kù)記錄的,此時(shí)則可以設(shè)置表單元素的數(shù)據(jù)引用為“表名/字段名”。則生成的表單XML文檔可以如下
<Employees>
<Address>復(fù)興門(mén) 245 號(hào)</Address>
<BirthDate>1968-12-8 0:00:00</BirthDate>
<City>北京</City>
<Country>中國(guó)</Country>
<EmployeeID>1</EmployeeID>
<Extension>5467</Extension>
<FirstName>穎</FirstName>
<Goal>2000</Goal>
<HireDate>1992-5-1</HireDate>
<HomePhone>(010) 65559857</HomePhone>
<LastName>張</LastName>
<Sex>2</Sex>
<Title>4</Title>
<TitleOfCourtesy>女士</TitleOfCourtesy>
</Employees>
<Customers>
<Address>大崇明路 50 號(hào)</Address>
<City>天津</City>
<CompanyName>三川實(shí)業(yè)有限公司</CompanyName>
<ContactName>劉小姐</ContactName>
<ContactTitle>銷(xiāo)售代表</ContactTitle>
<Country>中國(guó)</Country>
<CustomerID>ALFKI</CustomerID>
<Email>Silva@lisboncycle.com</Email>
</Customers>
</XFormValue>
很明顯,對(duì)于這樣的XML文檔,從根節(jié)點(diǎn)出發(fā),第一層子節(jié)點(diǎn)的名稱就是數(shù)據(jù)表的名稱,第二層子節(jié)點(diǎn)的名稱就是數(shù)據(jù)表各個(gè)字段的名稱。這樣很容易將XML文檔中的節(jié)點(diǎn)映射到數(shù)據(jù)庫(kù)表和字段上,因此容易開(kāi)發(fā)一個(gè)將XML文檔的數(shù)據(jù)更新到數(shù)據(jù)庫(kù)的通用例程。而且在應(yīng)用系統(tǒng)中,可以將所有的根據(jù)電子表單數(shù)據(jù)更新數(shù)據(jù)庫(kù)的代碼集中起來(lái)。
下一篇講講表單工具用戶可用性。
posted on 2007-08-16 09:55 袁永福 電子病歷,醫(yī)療信息化 閱讀(3455) 評(píng)論(4) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)