电子表单系列谈之表单数据处理
點擊下載其表單工具概念版本
一般的電子表單工具都要求能自動顯示和保存關系型數據庫中的數據,比如可以使用SQL語句查詢數據填充文本框,或者查詢一批數據填充到列表框中的列表項目。而且還要求能更新數據庫,能把用戶輸入的數據保存到數據庫中,可以新增,修改和刪除數據庫記錄。為實現這種功能,表單工具在定制表單模板的時候得設置讀取數據和更新數據庫用的SQL語句,或者設置表單數據輸入元素和數據庫字段的映射關系,運行時得直接連接數據庫,執行SQL更新語句更新數據。但隨著時代的進步,這種做法在開發和運行中暴露出一些問題。
對于目前的比較龐大而復雜的信息管理系統,很多系統都采用三層架構或多層結構,此處只討論有代表性的三層架構。在三層架構中,程序代碼根據功能分為三個大部分,數據庫處理層,業務邏輯層和數據顯示層(用戶界面層)。其中數據庫處理層專門處理底層數據庫,維護基礎的數據結構。業務邏輯層則調用數據庫層獲得數據并根據需要進行處理,而數據顯示層則從業務邏輯層獲得數據并顯示出來。
這種三層架構結構復雜,但程序靈活,適于團體開發,而且維護簡單,能比較方便的控制數據訪問的安全和限制,因此三層結構目前有很大的影響力。對于三層的數據庫信息管理系統,只有數據處理層能直接訪問數據庫,其他的程序模塊是不能的。
電子表單工具是用來顯示和輸入數據的,從功能上說應當是三層結構中的用戶界面層,它應當只能從業務邏輯層獲得數據,不應當從數據庫層獲直接連接數據庫獲得數據的,更不應當跳過業務邏輯層來直接更新數據庫。但目前一些表單工具卻如此這樣作,破壞了三層結構的原本的意義。一般來說,用戶界面層直接查詢數據庫獲得數據,只是影響了三層結構,數據庫結構發生改變,而用戶界面層沒有隨之更新,則最多只是不能正確的顯示數據,沒有其他的影響;但用戶界面層直接更新數據庫,新增修改或刪除數據庫記錄,這應當是破壞了三層結構,當數據庫結構發生改變而用戶界面層沒有隨之更新,則用戶界面層可能會破壞數據庫,導致數據錯誤和數據丟失。對于客戶而言,最重要的是數據而不是應用系統,應用系統可以更換,可以崩潰,但數據絕不能錯誤或丟失。因此從客戶的利益和軟件的安全性著想,使用電子表單工具直接更新數據庫應當慎重考慮。
一些電子表單工具具備能自動更新數據庫記錄的功能,但在現在的軟件開發過程中,這種功能要求日漸不重要。這是因為越多越多的開發人員使用各種成熟的對象-數據庫映射框架,或者使用各種代碼生成器來生成操作低層數據庫的代碼,而且各個公司對此有各自的規范和傳統,表單工具不應對此進行過多的干涉。
綜上所述,表單工具是處于用戶界面,用于顯示和輸入數據的,在三層架構中屬于用戶界面層,按照三層架構的基本規范,用戶界面層是不能直接讀取和更新底層數據庫的。因此電子表單不應當直接更新數據庫,而是向三層架構的業務邏輯層提供數據。
此處表單工具使用XML文檔和應用系統交換表單數據,應用系統將需要顯示的數據組織成一個XML文檔,然后傳遞給表單工具用戶界面,在用戶界面中,用戶確認輸入表單數據后,表單工具將表單數據組織成一個XML文檔返回給應用系統,應用系統將進行后續處理。
在表單文檔中,每一個可以輸入數據的表單元素都有一個“數據引用“的屬性,該屬性就說明了表單工具如何保存在XML文檔中。該屬性的格式類似XPath字符串,可以包含多個XML節點名稱,名稱之間由”/”分隔開來。
比如對于一個文本框,若數據引用為”Employees/Address”,則表單數據保存在XML文檔根節點的名為Employess子節點的名為Address的子節點下。生成的XML片斷可能為
<XFormValue?>???<Employees>
??????<Address>文本值</Address>
???</Employees>
</XFormValue>
若這個文本框的數據引用為”Employees/@Address”,則表單數據保存在XML文檔根節點的名為Employess的子節點的名為Address的屬性中。此時生成的XML片斷可能為
<XFormValue?>???<Employees?Address=”文本值”?/>
</XFormValue>
注意,這里的數據引用是模擬XPath的,不是真的XPath,只能設置各級XML元素的名稱,若出現XML屬性則放置在最后,而且沒有判斷條件。
在實際應用中,使用電子表單的最終目的一般是顯示和編輯數據庫記錄的,此時則可以設置表單元素的數據引用為“表名/字段名”。則生成的表單XML文檔可以如下
<XFormValue?>???<Employees>
??????<Address>復興門?245?號</Address>
??????<BirthDate>1968-12-8?0:00:00</BirthDate>
??????<City>北京</City>
??????<Country>中國</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?號</Address>
??????<City>天津</City>
??????<CompanyName>三川實業有限公司</CompanyName>
??????<ContactName>劉小姐</ContactName>
??????<ContactTitle>銷售代表</ContactTitle>
??????<Country>中國</Country>
??????<CustomerID>ALFKI</CustomerID>
??????<Email>Silva@lisboncycle.com</Email>
???</Customers>
</XFormValue>
很明顯,對于這樣的XML文檔,從根節點出發,第一層子節點的名稱就是數據表的名稱,第二層子節點的名稱就是數據表各個字段的名稱。這樣很容易將XML文檔中的節點映射到數據庫表和字段上,因此容易開發一個將XML文檔的數據更新到數據庫的通用例程。而且在應用系統中,可以將所有的根據電子表單數據更新數據庫的代碼集中起來。
下一篇講講表單工具用戶可用性。
轉載于:https://www.cnblogs.com/xdesigner/archive/2007/08/16/857639.html
總結
以上是生活随笔為你收集整理的电子表单系列谈之表单数据处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解剖JavaScript中的null和u
- 下一篇: 张弛有度