主題:本文介紹了一個直接根據數據庫表結構定義自動生成對該表記錄進行存取操作界面(FORM)的工具
1. 界面自動生成的必要性
一般在數據庫應用程序,特別是MIS軟件開發時,都會選擇使用開發工具,如PB、C++BUILDER,Delphi,UNIFACE等等。這些工具為數據庫應用程序的開發提供了強大的支持和幫助,使大部分開發工作轉化成一種簡單的,機械重復勞動。對一個新手,只要拖拉一些控件,在短短1-2個小時就可開發出一個可對數據庫進行操作的漂亮界面,這對一個新手的工作是一個極大的鼓勵。但我與一些從事數據庫應用程序開發時間較長的朋友交談時,他們幾乎全部都抱怨做數據庫應用程序開發太沒有意思,沒有創新,作長了感覺很煩。有個朋友也做了個小工具來減少重復勞動,效果還不錯。因此本人就決定開發了界面自動生成工具。開發的第一個工具是以Oracle和C++BUILDER 為基礎的,用於一個大型MIS項目開發,效果很好,大大地減少開發工作量,降低了開發成本,特別是為維護工作帶來了很大方便。在那個開發項目中,當第一個開發負責人因故要離開該項目時,軟件交接很容易。這是因為自動生成的程序很整齊,很規范,嚴格遵守命名規則,因此程序的可讀性很好,數據庫中的表名與界面名和源文件名直接對應,找源文件就很方便。 在第一個工具成功的鼓勵下,本人開發了實用性更強的第二個工具,是基於Delphi的,可選擇Oracle 或SQL-SERVER數據庫管理系統,及BDE或ADO連接方式。這裡主要介紹第二個工具的一些設計思路。
2. 工具設計的主要思路
由於界面的一個重要功能是對數據庫中表內的數據進行存取,界面與表之間有著直接關聯,因此這裡采用為每個數據庫表生成一套界面的思路。由於每個表的數據項多少不同,界面的空間有限,這裡根據每個表內數據項所占用的空間不同生成三種界面:
A 對數據項占用空間較小的情況,在界面的上半部安排一個記錄列表(DBGRID),
下半部安排編輯面板(安排LABEL和各種編輯框)。如圖1
圖1
B對數據項占用空間中等的情況,把記錄列表和編輯面板分別安排在兩個界面
上。通過記錄列表上的編輯按鈕,調用編輯面板界面。如圖2
圖2
其中相片為圖形文件,擋案按鈕自動調用WORD,且把該Word文件保存到數據庫中去。
C對數據項占用空間較大的情況,生成類似與B的界面,只是在編輯界面上有
多頁切換功能。
作為工具設計者來說,總希望生成的界面具有盡可能多的功能。但是靠計算機自動生成的只能是一些常規的,公共通用功能。對一些業務規則要求的非常規功能要自動生成難度很大,這還得靠人工來編程。對一些通用常規功能是否能自動生成,這還取決於該功能的語法定義是否簡潔直觀,及生成器開發難度。我們在生成器開發前,先開發盡可能多的通用控件。我們開發的通用控件有:通用打印控件,通用查詢控件及時間編輯框。在對時間編輯框內數據進行編輯時,程序會自動彈出日歷窗口。對DBGRID的功能進行擴展,可對DBGRID中的每一列進行排序,求最大值,最小值,平均值及求和。對界面生成時可供開發者選擇的功能如下。
1)可選擇該界面所對應的數據集使用TTABLE還是使用TQUERY。當使用後者時,給出查詢條件。
2)一個數據項是否允許為空。本來數據庫本身會做這個檢查,但為提高效率,我們把這個檢查放到前端來做。
3)該數據項在界面上是否可見。
4)該數據項是否是只讀,或在插入時可給出數據,但不允許修改。
5)該數據項是否代表貨幣。
6)給出該數據項的檢查范圍(LIMIT)。
7)給出該數據項在讀寫時的MARSK。
8)定義該數據項是否存儲圖形文件,用戶編輯該數據項時,當該數據項為空時會自動彈出文件目錄窗口,供用戶選擇加載圖形文件。當該數據項有內容時,會調用該圖形文件的處理軟件。
9)定義該數據項是否存儲WORD文件。當用戶編輯這個數據項時程序會自動彈出Word窗口。
10) 可定義一個數據項為LIST框,且給出LIST內容。
11) 定義一些數據項,當這些數據項的內容都不為空時,它們所對應的記錄將不允許修改和刪除。(對應批准後的記錄不能修改和刪除的情況)。
在界面上除了提供常規的新增、修改和刪除(確認,取消)外,還提供兩個功能:在插入時可選擇復制當前記錄的數據。當用戶調用其他操作,引起數據集刷新的情況時,光標會自動定位到原來位置。
對LOOK UP 框,從生成器實現來說,難度不大,但因要求的參數太多,開發者容易填錯,這裡就沒有提供,讓開發者手工來實現。在數據庫應用程序開發中會大量使用的主從表結構,因語法定義有困難,這裡就沒有提供這種界面的自動生成。對一個主表對應多個從表的情況,有的開發者把一個界面的上半部分安排給主表,下半部分重疊多個子表,用按鈕來切換子表,這樣使用起來很方便。對這樣的情況,開發者可在已生成界面的基礎上,手工實現這樣的界面安排,起碼可減少工作量。可自動生成的通用功能可能還有不少,歡迎讀者給我們提出新的建議。
3. 使用工具後的開發重點轉移
目前我們使用的建模工具為ER-WIN。我們把數據項的物理含義說明放到邏輯模型的COMMENT中,把生成所需的選擇放到物理模型的COMMENT中,預先為REPORT准備好一個模板。這樣利用ER-WIN的REPORT功能,就可把生成器所需要的數據,通過ER-WIN的REPORT功能,按規定格式寫入到一個TXT文件中去。生成器讀這個TXT文件就可自動生成該文件中要求的全部界面。在C++BUILDER中生成器生成全部界面的 H 文件,PCC文件,DFM文件及作為主程序的PCC文件。在Delphi中生成全部 PAS文件,DFM文件及作為主程序的DPR文件。在界面自動生成的基礎上,開發者要做三件工作:
1) 根據業務處理流程,組織界面調用次序。這樣生成的界面把數據庫表定義,表操作和界面結合在一起對象性很強,很容易實現業務流程重構的要求。
2) 對表上一些生成器不能提供的操作,開發者手工去做。如安排新的按鈕,編寫事件程序,在已生成的程序中增加或刪除部分代碼,調用存儲過程等。在實際工作中,當對已生成的代碼作增刪處理時,我們規定在修改處的兩頭必須用規定格式的注釋行做出標記。這樣當一個表中定義的數據項要增刪改的修改時,在界面重新生成後,很容易把修改部分人工合到新界面程序中去。將來也可開發工具把修改部分自動合到新生成的界面中去。
3) 根據業務處理要求,編寫存儲過程。這裡我們建議把盡可能多的業務處理放到存儲過程中去做,這樣做,其優點是明顯的
由此可見,使用該工具開發時,開發者在概要設計時重點主要放在兩個方面:一是搞好數據結構及相關界面生成參數設計,重點是使用ER-WIN去建模。另一個方面是搞好業務流程的提取,分析,整理。開發者不必再去考慮那些瑣碎功能的分配與安排。采用界面自動生成工具來開發數據庫應用程序帶來的優點主要為:
1)容易保證程序和文檔的一致性。當數據結構需要修改時,總是按照先修改ER-WIN內數據,再通過ER-WIN自動修改數據庫內的表,再自動生成界面這個原則,文檔和程序都來自同一個數據源,文檔和程序自然會保持同步。
2)開發者可把主要精力放到業務流程分析及業務處理的實現,使開發工作顯得不那麼枯燥,開發者可把主要精力放到創造性的工作上去。
3)大大簡化了文檔編寫工作。開發者在文檔編寫時可把主要精力放到業務流程分析結果的描述,存儲過程定義,實現途徑的描述。有關數據結構的描述及通用操作,可通過ER-WIN的REPORT功能直接產生。對在生成的界面程序上做增刪改的那部分代碼,由於這些都是小程序,很容易理解,詳細設計說明書的編寫要求可大量簡化。對一些復雜程度不太高的系統,這部分的詳細設計說明書可采用在程序中加較詳細的注釋行來代替。
4)采用工具來開發數據庫應用系統,工作分工明確,層次分明,很容易實現大兵團聯合開發的工作模式。集成調試相對要容易些。
5)降低開發成本,縮短開發周期,提高軟件質量,增加軟件系統的可維護性方面的優點,這裡就不再贅述了。
4. 其他
本工具開發出來後,在本人周圍的軟件開發人員中引起兩種不同的反響。一部分人員認為,該工具把他們從枯燥,無聊的重復勞動中解放出來,在軟件開發中突出了系統分析和設計的重要性,對工具表示歡迎。另一部分人員認為該工具使用後,使軟件開發失去了一種藝術創造的激情,用工具開發出來的界面過於單調,樸素,不易為用戶接受。在1997年出版的本人所著的“軟件開發技術與實踐”一書中本人曾表示過這樣的觀點:為促進我國的軟件事業發展,一定要把軟件開發從藝術創造中解脫出來,走工業化大生產的路。