国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Java Bean自動生成系統(tǒng)的設(shè)計與實現(xiàn)

2015-11-28 10:13:04楊靜
關(guān)鍵詞:代碼生成代碼實體

楊靜

(鄖陽師范高等??茖W(xué)校計算機(jī)科學(xué)系,湖北十堰442000)

在實際開發(fā)過程中,為了加快軟件的開發(fā)速度,要使用一定數(shù)量的框架,一是實現(xiàn)代碼的重復(fù)使用,二來使具體的項目開發(fā)更加方便[1]。用代碼生成工具生成代碼不僅能夠提高開發(fā)效率,而且能夠保證代碼風(fēng)格一致,提高代碼的可讀性和可維護(hù)性[2],降低軟件開發(fā)及維護(hù)成本。現(xiàn)有的主流代碼生成技術(shù)采用了基于模板的方法[3],代碼生成就是一個專注于解放編碼生產(chǎn)力,用程序來編程序[4]。通過代碼自動生成系統(tǒng),將一些重復(fù)使用或功能基本相似的模塊交由系統(tǒng)自動生成,提高軟件質(zhì)量和開發(fā)效率,解決了軟件開發(fā)中代碼重用的問題[5]。

首先,從軟件行業(yè)的角度來分析,軟件公司要在最短的時間內(nèi),利用最少的人力物力,開發(fā)出滿足客戶需求的產(chǎn)品,同時最大程度地增加公司的利潤;其次,從程序員編碼的角度分析[6],軟件開發(fā)人員的工作量非常大,軟件中的大段程序代碼基本都是程序員一行一行敲進(jìn)去的,當(dāng)然也有一些是復(fù)制粘貼的,但還需要進(jìn)行一些修改、調(diào)試,而且容易出錯,其效率低下;再者,從測試員的角度來看,工作強(qiáng)度也不小,他們不僅要對程序進(jìn)行測試,還要對業(yè)務(wù)邏輯進(jìn)行測試,同樣的問題在這里要測試,換個功能幾乎一樣的模塊也要測試,嚴(yán)重降低了測試效率;最后,從軟件維護(hù)的角度看,由于有些重復(fù)性代碼是復(fù)制粘貼過來的,導(dǎo)致在維護(hù)過程中,一個點出了錯誤,與該業(yè)務(wù)邏輯相關(guān)的所有地方都要修改,不易維護(hù)。針對上述情況,本系統(tǒng)設(shè)計了基于Java的代碼生成工具,將一些重復(fù)的Java Bean代碼通過該工具自動生成,需要時進(jìn)行調(diào)用即可。

1 系統(tǒng)設(shè)計

Java Bean 主要有實體Bean和業(yè)務(wù)Bean,實體Bean中的成員變量主要是數(shù)據(jù)庫中表的字段,方法是一些get、set等,業(yè)務(wù)Bean 主要針對表的增、刪、改、查。要想自動生成實體Bean,需要成功讀取數(shù)據(jù)庫中表的每個字段,并需要知道每個字段的類型,在Java中,可通過java.sql.Database MetaData中的DatabaseMetaData 獲得數(shù)據(jù)庫中元數(shù)據(jù),通過java.sql.ResultSetMetaData中的ResultSetMetaData獲得表中的數(shù)據(jù)元素,分別得到表字段名稱、字段類型等,然后根據(jù)名稱和類型,通過字符串的拼接即可生成一個實體Bean;業(yè)務(wù)Bean 則可以通過得到的表名及表中的每個字段拼接相應(yīng)的sql 語句,最后由所有拼接的字符串生成。

在代碼生成系統(tǒng)中,主要設(shè)計了工具包(utils包)、vo包、dao包和impl包,其中utils包中設(shè)計AutoTools、DBUtils、TypeTools 3個類,AutoTools類主要包含了生成實體Bean和業(yè)務(wù)Bean的2個方法,DBUtils類負(fù)責(zé)實現(xiàn)數(shù)據(jù)庫的連接和關(guān)閉,Type-Tools類則包含了一個將數(shù)據(jù)庫字段的類型轉(zhuǎn)換成java類型的方法;vo包中包含了一個Columns類,該類是一個Java Bean,封裝了數(shù)據(jù)庫中表的列,實現(xiàn)將數(shù)據(jù)庫表中的列名、類型轉(zhuǎn)化成Java的成員變量和類型;dao包中定義了AutoDao、AutoValueObject、ColumnDao、TableDao 4個類,其中AutoDao 接口中定義了4個抽象方法String insert(String packages,

String tableName)、String list(String packages,String tableName)、String edit(String packages,String table-Name)、String delete(String packages,String table-Name),分別用來實現(xiàn)增、刪、改、查的業(yè)務(wù)邏輯;AutoValuebject 接口中定義了bstract String constructor()和abstract String setProperty()抽象方法,分別用來實現(xiàn)構(gòu)造函數(shù)的生成和get、set方法的生成,即生成實體Bean;ColumnDao 接口中定義了一個List<Columns>list(String tableName)抽象方法,用來獲得表的數(shù)據(jù)類型及表字段的名稱,并將數(shù)據(jù)庫中表字段的屬性轉(zhuǎn)換成java中類的屬性;TableDao接口中定義了一個List<String>list()throws Exception 抽象方法,用來獲得數(shù)據(jù)庫中所有表對象。Impl 包主要定義了4個類,分別實現(xiàn)dao中的4個接口。系統(tǒng)結(jié)構(gòu)圖如圖1所示。

圖1 系統(tǒng)結(jié)構(gòu)圖

2 自動生成系統(tǒng)的設(shè)計與實現(xiàn)

2.1 自動生成系統(tǒng)的設(shè)計目標(biāo)

通過該代碼自動生成系統(tǒng),對配置文件進(jìn)行簡單地修改,可以實現(xiàn)數(shù)據(jù)庫連接,并將數(shù)據(jù)庫中每張表快速轉(zhuǎn)換為相應(yīng)的實體Bean和業(yè)務(wù)Bean,環(huán)境搭建簡潔,配置環(huán)境變量簡單,為了便于系統(tǒng)進(jìn)行后期擴(kuò)展,同時為基于反射的編程提供條件,在業(yè)務(wù)邏輯層的數(shù)據(jù)處理類上采用了基于接口的編程[7],當(dāng)有新的業(yè)務(wù)或更負(fù)責(zé)的業(yè)務(wù)要求時,只需要在接口中添加相應(yīng)的業(yè)務(wù)方法,并在實現(xiàn)類中實現(xiàn)該方法,使該系統(tǒng)具有良好的擴(kuò)展性和可維護(hù)性。

2.2 自動生成系統(tǒng)的實現(xiàn)

1)數(shù)據(jù)庫的連接與關(guān)閉在實現(xiàn)該模塊的時候,其關(guān)鍵是如何讀取配置文件。為了讓該系統(tǒng)能夠根據(jù)用戶的配置自動地連接該配置的數(shù)據(jù)庫,在實現(xiàn)該模塊的時候采用Properties文件來存儲訪問數(shù)據(jù)庫的用戶名、密碼、加載驅(qū)動的字符串及訪問數(shù)據(jù)庫的URL。在utils 包中建一個DBUtils類,在該類中有2個方法,即getConnection()和close(Connection conn)。其關(guān)鍵代碼是獲得Properties 文件的中內(nèi)容。

2)實體Bean和業(yè)務(wù)Bean的實現(xiàn)為了系統(tǒng)具有良好的擴(kuò)展性,在實現(xiàn)實體Bean和業(yè)務(wù)Bean時采用接口的方式。在該系統(tǒng)中定義了2個接口即AutoDao和AutoValueObject。其中AutoDao主要是用來定義業(yè)務(wù)Bean的接口,里面定義了一些業(yè)務(wù)方法,而AutoValueObject 主要用來定義實體Bean的接口,里面定義了2個方法,分別用來完成構(gòu)造方法的生成和get、set方法的生成。其實現(xiàn)部分代碼如下:

實體Bean在實現(xiàn)時,通過一個類實現(xiàn)AutoValueObject 接口,并重寫里面的方法,在重寫構(gòu)造方法時,根據(jù)具體情況可以分別生成無參的構(gòu)造方法和帶一個或多個參數(shù)的構(gòu)造方法;業(yè)務(wù)Bean在實現(xiàn)時,通過一個類實現(xiàn)AutoDao 接口中的所有方法,該接口中的方法主要是一些常用的增刪改查的操作。通過接口的實現(xiàn),當(dāng)有新的業(yè)務(wù)需求時,只需在接口中添加相應(yīng)方法并實現(xiàn),在應(yīng)用開發(fā)的過程中就可以避免由于業(yè)務(wù)的增加而修改大量代碼,使系統(tǒng)的擴(kuò)展性更好。

3)工具類的封裝有了生成實體Bean和業(yè)務(wù)Bean的類后,將這2個類進(jìn)一步封裝成一個工具類,即AutoTools類。在該類中主要有2個方法,即

autoDaoImp(List<String>list,String packageName)和valueObject(List<String> list,String package-Name),該方法分別用來生成業(yè)務(wù)Bean和實體Bean。在需要將數(shù)據(jù)庫中的所有表都生成相應(yīng)的實體Bean和業(yè)務(wù)Bean時,只需在配置文件中配置好后,分別調(diào)用AutoTools類中的autoDaoImp(List<String> list,String packageName)和valueObject(List<String>list,String packageName)方法就能夠很快地生成相應(yīng)的Java Bean。

使用該系統(tǒng)時,只需要將配置文件中的數(shù)據(jù)庫連接對象改為需要生成Java Bean的數(shù)據(jù)庫名稱,重新運行該系統(tǒng),就可以自動生成相應(yīng)的代碼。

3 結(jié)束語

采用分層的設(shè)計思想,各個模塊可以單獨開發(fā),這樣不僅可以提高程序的開發(fā)效率,同時也有利于程序的移植。因為在采用MVC模式的開發(fā)框架中,業(yè)務(wù)邏輯無論在哪個環(huán)境都是不變的,并且其中大多數(shù)功能都很相似,此時采用代碼自動生成系統(tǒng),將這些功能相似的模塊交由系統(tǒng)自動生成代碼,能有效提高程序的開發(fā)效率,降低開發(fā)成本,提升軟件質(zhì)量。

[1]宋翔宇,曾雅琳.一種新的代碼生成器的設(shè)計與實現(xiàn)[J].計算機(jī)科學(xué),2011,38(7A)∶67-69.

[2]張靜,孔芳,楊季文.一個基于Java的代碼生成工具的設(shè)計與實現(xiàn)[J].微電子學(xué)與計算機(jī),2007(6):222-224.

[3]冉春娟,黃華.基于關(guān)系數(shù)據(jù)模型代碼生成器的設(shè)計與實現(xiàn)[J].湖北大學(xué)學(xué)報:自然科學(xué)版,2010(2):151-156+169.

[4]萬軍民.基于Java的代碼生成器的設(shè)計與實現(xiàn)[J].計算機(jī)工程,2004(S1):122-124.

[5]陳清,吳海濤,王璐.基于代碼自動生成技術(shù)的管理信息系統(tǒng)的實現(xiàn)[J].計算機(jī)與數(shù)字工程,2013(2):268-270+317.

[6]盛剛,韓莉莉.J2EE代碼自動生成研究[J].計算機(jī)系統(tǒng)應(yīng)用,2006(8):31-33.

[7]周兵,許俊,吳亞平.中小MIS快速原型構(gòu)建與自動代碼生成[J].計算機(jī)技術(shù)與發(fā)展,2012(5):28-31+36.

猜你喜歡
代碼生成代碼實體
Lustre語言可信代碼生成器研究進(jìn)展
前海自貿(mào)區(qū):金融服務(wù)實體
中國外匯(2019年18期)2019-11-25 01:41:54
創(chuàng)世代碼
動漫星空(2018年11期)2018-10-26 02:24:02
創(chuàng)世代碼
動漫星空(2018年2期)2018-10-26 02:11:00
創(chuàng)世代碼
動漫星空(2018年9期)2018-10-26 01:16:48
創(chuàng)世代碼
動漫星空(2018年5期)2018-10-26 01:15:02
實體的可感部分與實體——兼論亞里士多德分析實體的兩種模式
振興實體經(jīng)濟(jì)地方如何“釘釘子”
兩會進(jìn)行時:緊扣實體經(jīng)濟(jì)“釘釘子”
代碼生成技術(shù)在軟件開發(fā)中的應(yīng)用
電子世界(2016年15期)2016-08-29 02:14:28
堆龙德庆县| 荔波县| 阳新县| 兴文县| 利津县| 左权县| 新竹市| 乌兰县| 定远县| 临洮县| 达拉特旗| 东兰县| 关岭| 临汾市| 新余市| 洛阳市| 浠水县| 荆州市| 西峡县| 高唐县| 江山市| 奉化市| 太谷县| 岚皋县| 茌平县| 金平| 浦北县| 灵璧县| 兴和县| 哈巴河县| 成都市| 深泽县| 林州市| 南郑县| 广水市| 汉中市| 齐河县| 彭山县| 筠连县| 汝城县| 夏邑县|