1.12 開發(fā)技巧與難點(diǎn)分析
本系統(tǒng)使用的是MDI窗體模式開發(fā)的程序界面,它使用一個(gè)主窗體包含多個(gè)子窗體,子窗體只能在主窗體規(guī)定的范圍內(nèi)移動(dòng)。這些子窗體由導(dǎo)航面板上的按鈕調(diào)用,這些按鈕需要添加事件監(jiān)聽器,在單擊該按鈕時(shí),由事件監(jiān)聽器創(chuàng)建并初始化相應(yīng)的子窗體,然后顯示該子窗體。
如果為每個(gè)按鈕都創(chuàng)建新的事件監(jiān)聽器對象,那至少需要20個(gè)事件監(jiān)聽器類,因?yàn)閷?dǎo)航面板上定義的按鈕總數(shù)和子窗體的數(shù)量是對應(yīng)的,而子窗體的數(shù)量正好是20個(gè),所以需要定義相應(yīng)數(shù)量的按鈕和事件監(jiān)聽器,這些繁瑣的工作會占用大量的程序開發(fā)時(shí)間,影響工程進(jìn)度。
從不同的按鈕監(jiān)聽器所實(shí)現(xiàn)的業(yè)務(wù)邏輯中不難發(fā)現(xiàn),它們所完成的工作基本相同,都是創(chuàng)建并初始化子窗體,然后顯示它們。如果它們能夠使用同一個(gè)事件監(jiān)聽器類就可以實(shí)現(xiàn)代碼重用,同時(shí)也節(jié)省了代碼工作量,提高程序開發(fā)速度。
這樣的開發(fā)思路存在很多優(yōu)點(diǎn),但是實(shí)現(xiàn)起來并不容易,子窗體的名稱、類名都可以獲取,但是如何根據(jù)指定的類名去創(chuàng)建子窗體對象呢?
Java的反射功能為這個(gè)思路提供了可行性。在java.lang.reflect包中有Field類、Method類和Constructor類,這3個(gè)類分別描述類的字段、方法和構(gòu)造方法。這里需要的就是類的構(gòu)造方法,只有調(diào)用類的構(gòu)造方法才能創(chuàng)建該類的實(shí)例對象??梢酝ㄟ^Class類的getConstructor()方法獲取Constructor類的實(shí)例對象,然后調(diào)用該對象的newInstance()方法創(chuàng)建類的實(shí)例對象。關(guān)鍵代碼如下:
例程32 代碼位置:光盤\TM\01\JXCManager\src\com\lzw\JXCFrame.java
try {
Class fClass = Class.forName("internalFrame." + frameName);
Constructor constructor = fClass.getConstructor(null);
jf = (JInternalFrame) constructor.newInstance(null);
ifs.put(frameName, jf);
} catch (Exception e) {
e.printStackTrace();
}
代碼貼士
調(diào)用Class類的forName()方法加載指定的Java類,該方法將返回該類的Class實(shí)例對象。
調(diào)用指定類的getConstructor()方法獲取指定的構(gòu)造器。方法中使用null作參數(shù),是調(diào)用該類的默認(rèn)構(gòu)造器,因?yàn)轭惖哪J(rèn)構(gòu)造器沒有任何參數(shù)。
調(diào)用構(gòu)造器的newInstance()方法,同樣傳遞參數(shù)null,這樣就可以調(diào)用默認(rèn)的構(gòu)造方法創(chuàng)建子窗體對象。
1.13 使用PowerDesigner逆向生成數(shù)據(jù)庫E-R圖
在開發(fā)一個(gè)新的程序時(shí),為提高開發(fā)速度,經(jīng)常修改現(xiàn)有的與將要開發(fā)的程序相類似的舊程序。同樣,功能相似的程序,其數(shù)據(jù)庫也基本相似,甚至完全相同,此時(shí)便可以直接使用原有的數(shù)據(jù)庫,從而節(jié)省數(shù)據(jù)庫設(shè)計(jì)的時(shí)間和工作量。而要分析一個(gè)數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)和連接關(guān)系,E-R圖是最好的數(shù)據(jù)庫資料。但是原有的數(shù)據(jù)庫也許是多年以前的,或者是借鑒同事的,資料不一定完整,也不一定存在E-R圖。這就給數(shù)據(jù)庫分析帶來了很大的不便。
如果能夠使用相應(yīng)的設(shè)計(jì)工具將數(shù)據(jù)庫的結(jié)構(gòu)和關(guān)系抽象成E-R圖,就可以為系統(tǒng)分析員提供相應(yīng)的數(shù)據(jù)庫資料,從而分析或修改原有數(shù)據(jù)庫。本節(jié)將介紹如何使用PowerDesigner工具實(shí)現(xiàn)數(shù)據(jù)庫E-R圖的逆向生成。
(1)在開始逆向生成E-R圖之前,需要為指定的數(shù)據(jù)庫創(chuàng)建ODBC數(shù)據(jù)源。以Windows 2003操作系統(tǒng)為例,選擇“開始”/“運(yùn)行”命令,在彈出的“運(yùn)行”對話框中的“打開”文本框中輸入odbcad32.exe,然后單擊“確定”按鈕,啟動(dòng)數(shù)據(jù)源管理器。
(2)在“ODBC數(shù)據(jù)源管理器”對話框中單擊“添加”按鈕。
(3)在彈出的“創(chuàng)建新數(shù)據(jù)源”對話框中選擇SQL Server選項(xiàng),單擊“完成”按鈕,如圖1.33所示。