摘 要: 本文提出並實現了一種數據驅動的命令界面生成方案, 以一致的方式生成所有命令的界面元素,能方便靈活地適應命令的修改變化。
要害詞: 數據驅動;命令; Java
<!-- frame contents -->
<!-- /frame contents -->
在典型的企業應用軟件中,應用一般會提供一組命令作為用戶與應用程序之間的接口。隨著企業需求的變化和技術的發展,要求對原來的命令需要做出調整,比如增加命令,修改命令參數等,這可能需要修改應用程序,以生成調整後的命令界面。本文提出並實現了一種數據驅動的命令界面生成方案,該方案以一致的方式來處理所有命令,最大限度地保證命令的增加、刪除、修改,不需要或很少需要修改應用程序。
1 數據驅動方案的提出和思想 通常情況下,應用程序根據自己的業務邏輯進行界面設計, 對於一條具體的命令,開發人員需要編寫界面生成代碼以生成該命令的界面元素,如菜單項、參數輸入對話框等.在應用的命令數量不大時,這是比較直接的做法.但當應用包含有成百上千條命令時,還要逐一地為每條命令生成界面元素,無疑是件繁瑣的事情。此外,隨著應用的升級,可能要求對原有的命令系統做出修改,這又要求修改代碼以生成修改後的命令界面元素。我們希望能有一種實現方法可以方便靈活生成命令的界面元素並適應命令將來調整的需要,而對我們程序的影響最小。
考察應用的所有命令可發現,雖然各命令的功能意義不同,但命令組成形式卻有很大的相似性,都包括命令標識和零個或多個參數,而且為每條命令編寫的界面生成代碼也非常近似。因此我們可以以一種統一的方法來處理所有命令。數據驅動的命令界面生成方案的主要思想正基於此,以某種方式對應用的所有命令統一進行描述,通過描述數據來驅動所有命令的界面元素生成。本文使用數據庫表完成對所有命令的原始描述。
參數的性質是通過其數據類型來反映的,只需根據實際應用,定義本應用中參數可能的各種數據類型.而數據類型的種類總是有限的,通過對每一種數據類型給出其處理辦法,就可以實現對為數眾多的參數的處理轉為對有限種的數據類型的處理。
2 命令的數據庫表描述 以數據庫表中對命令的描述為出發點, 以後命令的增加、刪除、修改及命令參數的變動只需修改描述表中的相關項.命令一般包括命令標識和參數,但為更有效地對命令進行組織治理和適應更復雜應用的需要,對命令的描述通過定義命令類型描述表、命令描述表、命令參數描述表、枚舉描述表四級結構來完成.命令類型字段和命令字段聯合確定一條唯一的命令,提供直觀的名字字符和數值編碼兩種方式以適應不同需要。參數表中定義了參數類型和取值要求,枚舉表是為非凡的參數類型設置的,其取值是在一些選擇項中選取。各級表除了給出本表定義對象的基本屬性外,假如有下級元素,還給出了下級元素的個數及其在下級表中的位置,通過這種方式將一條命令的各構成部分關聯起來.下面給出這種表結構的一個簡單示例。
· 命令類型描述表:描述命令的分類.
唯一標志
編號
名字
命令的個數
命令描述位置
ct_00010
248
系統治理類
2
c_00010
表1 命令類型描述
· 命令描述表: 描述具體命令
唯一標志
編號
名字
參數的個數
參數描述位置
c_00010
1
系統聯絡請求
1
p_00010
c_00011
2
系統復位
0
表2 命令描述表
· 命令參數描述表: 描述各命令的參數.參數的值是在用戶調用命令時設定的,事先無法確定.我們只是對參數的性質做出一些約束。數據類型的種類視具體應用而定,應用可以為每種類型指定一數值編號,在表中填寫參數數據類型的編號值。參數的最大值最小值給出了參數的取值范圍或長度限制。
唯一標志
名字
數據類型
最大值
最小值
枚舉的個數
枚舉描述位置
p_00010
是否要求響應
9
2
e_00010
p_00020
源文件名
13
32
0
表3 命令參數描述表
· 枚舉描述表:給出枚舉類型參數的枚舉項
唯一標志
枚舉名
枚舉值
e_00010
要求響應
1
e_00011
不要求響應
0 表4:枚舉描述表
以上表1只表4的內容僅提供一般性的示范,實際應用可根據業務邏輯的需要定義自己的命令內容,命令的規模不受限制.進入討論組討論。
3 數據驅動方案的Java語言實現 3.1 命令的內存結構
為了在程序中反映命令結構,定義CmdType、Cmd、CmdField、Enum四個類分別與數據庫中的命令類型描述表、命令描述表、命令參數描述表、枚舉描述表相對應.每個類包含與其對應表中各列所描述的屬性,表的記錄在讀表到內存時表現為類的實例。下面以其中的一個類CmdType來說明.