一種Java代碼生成方法
【專利摘要】一種Java代碼生成方法,該方法需提供一模板模塊、數(shù)據(jù)解析模塊、代碼生成模塊和數(shù)據(jù)模塊,代碼生成模塊中定義有源代碼自動(dòng)生成腳本;具體操作方法:提取元數(shù)據(jù),將元數(shù)據(jù)進(jìn)行定義形成元數(shù)據(jù)文件,并存儲(chǔ)于數(shù)據(jù)模塊中;數(shù)據(jù)解析模塊提取元數(shù)據(jù)文件,解析出元數(shù)據(jù),同時(shí)從模板模塊獲取代碼模板,并把元數(shù)據(jù)轉(zhuǎn)換為模板對(duì)象;代碼模板中具有用于標(biāo)識(shí)所述模板對(duì)象的命名參數(shù);代碼生成模塊執(zhí)行所述源代碼自動(dòng)生成腳本,使用所述模板對(duì)象對(duì)所述代碼模板中的命名參數(shù)進(jìn)行賦值,生成復(fù)數(shù)個(gè)源代碼文件,并保存在數(shù)據(jù)模塊中且對(duì)應(yīng)于所述元數(shù)據(jù)文件所在位置處;本發(fā)明具有可維護(hù)性高、代碼一致性好、可重用性強(qiáng),提高了開(kāi)發(fā)效率,降低了人力成本。
【專利說(shuō)明】—種Java代碼生成方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明具體涉及一種Java代碼生成方法。
【背景技術(shù)】
[0002]現(xiàn)有代碼生成方法一般分為兩大類:被動(dòng)代碼生成方法和主動(dòng)代碼生成方法。在被動(dòng)代碼生成方法中,一般采用可視化向?qū)У姆绞脚渲蒙刹糠执a,然后軟件開(kāi)發(fā)人員對(duì)代碼進(jìn)行必要的編輯修改,這種生成過(guò)程只進(jìn)行一次,不對(duì)已修改的代碼進(jìn)行維護(hù);目前大部分的集成開(kāi)發(fā)環(huán)境(Integrated Development Environment, IDE)或者編輯器就包含有這種代碼生成方法。但是這種代碼生成方法的局限性也是顯而易見(jiàn)的,IDE或者編輯器只負(fù)責(zé)生成一次,剩下的工作量都是軟件開(kāi)發(fā)人員的,重新生成將會(huì)覆蓋已修改的代碼,而且也只適用于部分場(chǎng)景,可配置性不足。
[0003]在主動(dòng)代碼生成方法中,軟件開(kāi)發(fā)人員同樣可對(duì)生成的代碼進(jìn)行編輯修改,而改動(dòng)后的代碼可以作為參數(shù)導(dǎo)入生成器,生成器保留改動(dòng)后的代碼,并影響之后的代碼生成,同時(shí)可配置性以及適用范圍都比被動(dòng)代碼生成方法更好,目前編譯器類型的生成器屬于主動(dòng)代碼生成方法。然而,現(xiàn)有的主動(dòng)代碼生成方法是直接通過(guò)數(shù)據(jù)庫(kù)表進(jìn)行的,由數(shù)據(jù)庫(kù)表開(kāi)始解析,必須轉(zhuǎn)化出對(duì)應(yīng)某一種數(shù)據(jù)庫(kù)的建表腳本創(chuàng)建數(shù)據(jù)庫(kù),這要求代碼生成方法要適配于多種主流數(shù)據(jù)庫(kù)。另外,雖然可對(duì)單個(gè)新添加的數(shù)據(jù)庫(kù)表單獨(dú)生成代碼,但是生成的代碼全部混合放置于各個(gè)層次的包中,不能按照數(shù)據(jù)相關(guān)性分包分類生成,無(wú)法簡(jiǎn)便地在數(shù)據(jù)庫(kù)模型階段引入自定義標(biāo)識(shí)、檢索、異常等邏輯。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種Java代碼生成方法,具有可維護(hù)性高、代碼一致性好、可重用性強(qiáng),提高了開(kāi)發(fā)效率,降低了人力成本。
[0005]本發(fā)明是通過(guò)以下技術(shù)方案解決上述技術(shù)問(wèn)題的:一種Java代碼生成方法,該方法需提供一模板模塊、數(shù)據(jù)解析模塊、代碼生成模塊和數(shù)據(jù)模塊,所述代碼生成模塊中定義有一源代碼自動(dòng)生成腳本;所述Java代碼生成方法的具體操作方法如下:
[0006]步驟10:將元數(shù)據(jù)進(jìn)行解釋定義,形成一元數(shù)據(jù)文件,并存儲(chǔ)于所述數(shù)據(jù)模塊中;所述元數(shù)據(jù)用于描述數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫(kù)中的要素及要素之間關(guān)聯(lián)關(guān)系信息的數(shù)據(jù);
[0007]步驟20:所述數(shù)據(jù)解析模塊提取所述元數(shù)據(jù)文件,并解析出元數(shù)據(jù),同時(shí)從所述模板模塊獲取代碼模板,并根據(jù)所述代碼模板封裝元數(shù)據(jù),把元數(shù)據(jù)轉(zhuǎn)換為模板對(duì)象,最后將所述代碼模板和模板對(duì)象交給代碼生成模塊;所述代碼模板中具有用于標(biāo)識(shí)所述模板對(duì)象的命名參數(shù);
[0008]步驟30:代碼生成模塊執(zhí)行所述源代碼自動(dòng)生成腳本,使用所述模板對(duì)象對(duì)所述代碼模板中的命名參數(shù)進(jìn)行賦值,生成復(fù)數(shù)個(gè)源代碼文件,并保存在數(shù)據(jù)模塊中且對(duì)應(yīng)于所述元數(shù)據(jù)文件所在位置處,該元數(shù)據(jù)文件所在位置處為:步驟10中元數(shù)據(jù)文件存儲(chǔ)在數(shù)據(jù)模塊中的地址位置。[0009]進(jìn)一步地,所述步驟10中的元數(shù)據(jù)定義為6種類型,包括實(shí)體定義、屬性定義、方法定義、關(guān)聯(lián)關(guān)系定義、異常定義和權(quán)限定義;
[0010]所述實(shí)體定義用于指定代碼的實(shí)體類,其對(duì)應(yīng)著一數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)表;
[0011]所述屬性定義用于指定實(shí)體類下的屬性,其對(duì)應(yīng)著一數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)表字段;
[0012]所述方法定義用于指定實(shí)體類下對(duì)一數(shù)據(jù)庫(kù)進(jìn)行操作的方法,其對(duì)應(yīng)著基本數(shù)據(jù)操作;
[0013]所述關(guān)聯(lián)關(guān)系定義用于指定各實(shí)體類之間的引用關(guān)系,其對(duì)應(yīng)著一數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)表之間的關(guān)聯(lián)關(guān)系;
[0014]所述異常定義用于生成一實(shí)體類的異常類,以精確定位異常;
[0015]所述權(quán)限定義用于定義功能模塊,并為各功能模塊分別加上權(quán)限限制。
[0016]進(jìn)一步地,所述復(fù)數(shù)個(gè)源代碼文件的邏輯架構(gòu)分為數(shù)據(jù)模型層、數(shù)據(jù)持久層和業(yè)務(wù)邏輯層;所述數(shù)據(jù)模型層與一數(shù)據(jù)庫(kù)對(duì)應(yīng),數(shù)據(jù)模型層中的每一實(shí)體類均對(duì)應(yīng)于該數(shù)據(jù)庫(kù)中的一數(shù)據(jù)庫(kù)表;所述數(shù)據(jù)庫(kù)持久層對(duì)應(yīng)于所述數(shù)據(jù)庫(kù)的基本數(shù)據(jù)操作;所述業(yè)務(wù)邏輯層為各功能模塊提供業(yè)務(wù)邏輯;
[0017]所述數(shù)據(jù)持久層調(diào)用數(shù)據(jù)模型層操作數(shù)據(jù)庫(kù),所述業(yè)務(wù)邏輯層調(diào)用數(shù)據(jù)持久層,把各種業(yè)務(wù)邏輯處理完的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)相關(guān)聯(lián)的數(shù)據(jù)庫(kù)表中,同時(shí)處理寫入過(guò)程中上報(bào)的異常,精確定位到具體實(shí)體類的何種異常。
[0018]進(jìn)一步地,所述步驟30中,代碼生成模塊執(zhí)行所述源代碼自動(dòng)生成腳本后,代碼生成模塊還生成一權(quán)限控制模塊和一授權(quán)服務(wù)模塊;所述權(quán)限控制模塊用于對(duì)各功能模塊設(shè)置訪問(wèn)權(quán)限,所述授權(quán)服務(wù)模塊用于對(duì)用戶訪問(wèn)數(shù)據(jù)模塊的訪問(wèn)請(qǐng)求進(jìn)行訪問(wèn)權(quán)限檢測(cè);
[0019]所述Java代碼生成方法還包括以下內(nèi)容:
[0020]步驟40:代碼生成模塊再次執(zhí)行所述源代碼自動(dòng)生成腳本,然后檢測(cè)所述功能模塊和業(yè)務(wù)邏輯層是否存在變更,若是,則執(zhí)行步驟50 ;若否,則結(jié)束流程;
[0021]步驟50:結(jié)合所述元數(shù)據(jù)的權(quán)限定義中為各功能模塊所設(shè)置的權(quán)限,權(quán)限控制模塊為各功能模塊分別加上訪問(wèn)權(quán)限控制,生成具有權(quán)限控制的本地服務(wù)代碼。
[0022]進(jìn)一步地,所述代碼生成模塊中還定義有一數(shù)據(jù)庫(kù)初始化生成腳本;
[0023]步驟20和步驟30之間還包括步驟21:代碼生成模塊執(zhí)行數(shù)據(jù)庫(kù)初始化生成腳本,并采用所述模板對(duì)象對(duì)所述代碼模板中的命名參數(shù)進(jìn)行賦值,生成數(shù)據(jù)庫(kù)建表腳本,并保存于數(shù)據(jù)模塊中。
[0024]進(jìn)一步地,所述元數(shù)據(jù)文件為XML文檔格式文件。
[0025]本發(fā)明的有益效果在于:相對(duì)于現(xiàn)有的直接通過(guò)數(shù)據(jù)庫(kù)表進(jìn)行Java代碼生成的方法,本發(fā)明使用了元數(shù)據(jù)文件即XML文本作為元數(shù)據(jù)的載體,不過(guò)度依賴于具體的數(shù)據(jù)庫(kù),本發(fā)明按照所述元數(shù)據(jù)文件單獨(dú)進(jìn)行代碼生成,所述元數(shù)據(jù)文件可只對(duì)應(yīng)一張數(shù)據(jù)庫(kù)表,也可對(duì)應(yīng)多個(gè)耦合度高的庫(kù)表,且生成的源代碼文件按所述元數(shù)據(jù)文件分包,再分層分類,結(jié)構(gòu)更加簡(jiǎn)明清晰;具有可維護(hù)性高、代碼一致性好、可重用性強(qiáng)等優(yōu)勢(shì),本發(fā)明通過(guò)在多個(gè)實(shí)際項(xiàng)目中的實(shí)踐,自動(dòng)生成的代碼占了整個(gè)系統(tǒng)源代碼的大部分,顯著提高了開(kāi)發(fā)效率,減少了開(kāi)發(fā)人員的數(shù)量,降低了人力成本?!緦@綀D】
【附圖說(shuō)明】
[0026]下面參照附圖結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步的描述。
[0027]圖1為本發(fā)明一種Java代碼生成方法的原理框圖。
[0028]圖2為本發(fā)明中數(shù)據(jù)模塊的原理框圖。
【具體實(shí)施方式】
[0029]請(qǐng)參閱圖1,一種Java代碼生成方法,該方法需提供一模板模塊、數(shù)據(jù)解析模塊、代碼生成模塊和數(shù)據(jù)模塊,所述代碼生成模塊中定義有一源代碼自動(dòng)生成腳本和一數(shù)據(jù)庫(kù)初始化生成腳本;
[0030]所述Java代碼生成方法的具體操作方法如下:
[0031]步驟10:將元數(shù)據(jù)進(jìn)行定義形成一 XML文檔格式的元數(shù)據(jù)文件,并存儲(chǔ)于所述數(shù)據(jù)模塊中,即存儲(chǔ)在src目錄里,src目錄在軟件開(kāi)發(fā)里是默認(rèn)存放下文所述源代碼文件的地方;所述元數(shù)據(jù)文件為XML文檔格式文件,以方便人們進(jìn)行編寫查看。所述元數(shù)據(jù)用于描述數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫(kù)中的要素及要素之間關(guān)聯(lián)關(guān)系信息的數(shù)據(jù),元數(shù)據(jù)是用于描述數(shù)據(jù)及其環(huán)境的數(shù)據(jù),本發(fā)明通過(guò)解釋元數(shù)據(jù)以達(dá)到控制代碼行為。
[0032]所述元數(shù)據(jù)定義為6種類型,包括實(shí)體定義、屬性定義、方法定義、關(guān)聯(lián)關(guān)系定義、異常定義和權(quán)限定義;
[0033]所述實(shí)體定義用于指定代碼的實(shí)體類,其對(duì)應(yīng)著一數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)表,一個(gè)元數(shù)據(jù)文件里可以有多個(gè)實(shí)體定義;
[0034]所述屬性定義用于指定實(shí)體類下的屬性,其對(duì)應(yīng)著一數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)表字段;
[0035]所述方法定義用于指定實(shí)體類下對(duì)一數(shù)據(jù)庫(kù)進(jìn)行操作即增刪改查的方法,其對(duì)應(yīng)著基本數(shù)據(jù)操作;
[0036]所述關(guān)聯(lián)關(guān)系定義用于指定各實(shí)體類之間的引用關(guān)系,其對(duì)應(yīng)著一數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)表之間的關(guān)聯(lián)關(guān)系;
[0037]所述異常定義用于生成一實(shí)體類的異常類,方便精確定位異常;
[0038]所述權(quán)限定義用于定義功能模塊,并為各功能模塊分別加上權(quán)限限制。
[0039]步驟20:所述數(shù)據(jù)解析模塊提取所述元數(shù)據(jù)文件,并解析出元數(shù)據(jù),同時(shí)從所述模板模塊獲取代碼模板,并根據(jù)所述代碼模板封裝元數(shù)據(jù),把元數(shù)據(jù)轉(zhuǎn)換為模板對(duì)象,最后將所述代碼模板和模板對(duì)象交給代碼生成模塊;所述代碼模板中具有用于標(biāo)識(shí)所述模板對(duì)象的命名參數(shù);
[0040]所述模板對(duì)象是元數(shù)據(jù)的封裝格式,每一命名參數(shù)均是代碼模板上的一個(gè)標(biāo)記,命名參數(shù)是做代碼模板時(shí)定義的,只是個(gè)標(biāo)記,標(biāo)記這里要填入哪種模板對(duì)象,而元數(shù)據(jù)經(jīng)封裝成模板對(duì)象后最終要替換代碼模板中的命名參數(shù)。
[0041]步驟21:代碼生成模塊執(zhí)行數(shù)據(jù)庫(kù)初始化生成腳本,并采用所述模板對(duì)象對(duì)所述代碼模板中的命名參數(shù)進(jìn)行賦值,生成數(shù)據(jù)庫(kù)建表腳本,并保存于數(shù)據(jù)模塊中,即存儲(chǔ)于sql目錄里;即數(shù)據(jù)庫(kù)初始化生成腳本會(huì)統(tǒng)一檢測(cè)所有元數(shù)據(jù)的變更,就是檢查所有元數(shù)據(jù)添加、修改如新增一個(gè)元數(shù)據(jù)文件,修改文件中的一個(gè)或幾個(gè)參數(shù)等等,都要反饋到生成的數(shù)據(jù)庫(kù)建表腳本中,再生成數(shù)據(jù)庫(kù)建表腳本;且所述數(shù)據(jù)庫(kù)建表腳本存放在下文所述源代碼文件的src目錄中。[0042]本發(fā)明的數(shù)據(jù)庫(kù)初始化生成腳本支持所有主流數(shù)據(jù)庫(kù),將統(tǒng)一生成所有主流數(shù)據(jù)庫(kù)的建表腳本,方便選用數(shù)據(jù)庫(kù)建庫(kù)建表,因?yàn)閳?zhí)行所述數(shù)據(jù)庫(kù)建表腳本就可以自動(dòng)生成數(shù)據(jù)庫(kù)表,不需手動(dòng)編寫建表腳本建數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)建表腳本建的是數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)表,而下文所述數(shù)據(jù)模型層就是與數(shù)據(jù)庫(kù)對(duì)應(yīng),對(duì)數(shù)據(jù)模型層的操作將直接反映到使用數(shù)據(jù)庫(kù)建表腳本創(chuàng)建的數(shù)據(jù)庫(kù)中,每一張數(shù)據(jù)庫(kù)表對(duì)應(yīng)于數(shù)據(jù)模型層中的一個(gè)實(shí)體類,對(duì)實(shí)體類中數(shù)據(jù)的變更最終都將寫入到數(shù)據(jù)庫(kù)表中。
[0043]步驟30:代碼生成模塊執(zhí)行所述源代碼自動(dòng)生成腳本,代碼生成模塊使用所述模板對(duì)象對(duì)所述代碼模板中的命名參數(shù)進(jìn)行賦值,生成復(fù)數(shù)個(gè)源代碼文件,保存在數(shù)據(jù)模塊中并對(duì)應(yīng)于所述元數(shù)據(jù)文件所在位置處,該元數(shù)據(jù)文件所在位置處為:步驟10中元數(shù)據(jù)文件存儲(chǔ)在數(shù)據(jù)模塊中的地址位置;同時(shí),代碼生成模塊執(zhí)行所述源代碼自動(dòng)生成腳本后,代碼生成模塊還生成一權(quán)限控制模塊和一授權(quán)服務(wù)模塊。
[0044]所述源代碼自動(dòng)生成腳本可對(duì)一個(gè)元數(shù)據(jù)文件單獨(dú)執(zhí)行代碼生成,也可對(duì)多個(gè)元數(shù)據(jù)文件同時(shí)進(jìn)行代碼生成;當(dāng)有多個(gè)元數(shù)據(jù)文件同時(shí)進(jìn)行代碼生成時(shí),生成的源代碼文件將按照所屬元數(shù)據(jù)文件分包存儲(chǔ)在該元數(shù)據(jù)文件所在的位置,即用一個(gè)元數(shù)據(jù)文件執(zhí)行代碼生成的源代碼文件就放在該元數(shù)據(jù)文件所在位置,若有多個(gè)元數(shù)據(jù)文件,元數(shù)據(jù)文件要分包存儲(chǔ),然后各個(gè)元數(shù)據(jù)文件生成的源代碼就生成在自己的元數(shù)據(jù)文件的包中,如圖2所示,例如有兩個(gè)元數(shù)據(jù)文件就分為2個(gè)包(包1、包2),包I中的元數(shù)據(jù)文件執(zhí)行代碼生成的源代碼文件就存儲(chǔ)于包I中,且該些源代碼文件按照各自所提供的功能進(jìn)行歸類,分為三類即三個(gè)子包分別是數(shù)據(jù)模型層、數(shù)據(jù)持久層或業(yè)務(wù)邏輯層,對(duì)應(yīng)于數(shù)據(jù)模型層的源代碼文件就存儲(chǔ)于該數(shù)據(jù)模型層的子包中,對(duì)應(yīng)于數(shù)據(jù)持久層的源代碼文件就存儲(chǔ)于該數(shù)據(jù)持久層的子包中,對(duì)應(yīng)于業(yè)務(wù)邏輯層的源代碼文件就存儲(chǔ)于該業(yè)務(wù)邏輯層的子包中;同理,包2的元數(shù)據(jù)文件生成的源代碼文件也是按照如此規(guī)律進(jìn)行分包存儲(chǔ),再分層分類。
[0045]所述復(fù)數(shù)個(gè)源代碼文件的邏輯架構(gòu)分為數(shù)據(jù)模型層、數(shù)據(jù)持久層和業(yè)務(wù)邏輯層;所述數(shù)據(jù)模型層與一數(shù)據(jù)庫(kù)對(duì)應(yīng),數(shù)據(jù)模型層中的每一實(shí)體類均對(duì)應(yīng)于該數(shù)據(jù)庫(kù)中的一數(shù)據(jù)庫(kù)表;所述數(shù)據(jù)庫(kù)持久層對(duì)應(yīng)于所述數(shù)據(jù)庫(kù)的基本數(shù)據(jù)操作;所述業(yè)務(wù)邏輯層為各功能模塊提供業(yè)務(wù)邏輯;基本數(shù)據(jù)操作如查改增刪,重復(fù)性很高,同樣數(shù)據(jù)模型層中的實(shí)體類代碼也具有較高重復(fù)性,當(dāng)一個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)表達(dá)到幾十到上百?gòu)埡?,本發(fā)明對(duì)效率的提升顯而易見(jiàn)。
[0046]所述數(shù)據(jù)持久層調(diào)用數(shù)據(jù)模型層操作數(shù)據(jù)庫(kù),所述業(yè)務(wù)邏輯層調(diào)用數(shù)據(jù)持久層,把各種業(yè)務(wù)邏輯處理完的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)相關(guān)聯(lián)的數(shù)據(jù)庫(kù)表中,同時(shí)處理寫入過(guò)程中上報(bào)的異常,精確定位到具體實(shí)體類的何種異常。
[0047]上述元數(shù)據(jù)的實(shí)體定義和屬性定義對(duì)應(yīng)于數(shù)據(jù)模型層,方法定義對(duì)應(yīng)于數(shù)據(jù)持久層,而關(guān)聯(lián)關(guān)系定義、異常定義和權(quán)限定義都可對(duì)應(yīng)于業(yè)務(wù)邏輯層,關(guān)聯(lián)關(guān)系定義有部分也對(duì)應(yīng)數(shù)據(jù)持久層。所述數(shù)據(jù)模型層、數(shù)據(jù)持久層、業(yè)務(wù)邏輯層都是由源代碼文件組成的,這三層相當(dāng)于對(duì)不同的源代碼文件進(jìn)行歸類;所述源代碼文件是由字符代碼組成的,源代碼文件提供的功能是操作數(shù)據(jù)庫(kù)(如查詢、修改等)就歸到數(shù)據(jù)持久層這一類中。
[0048]所述權(quán)限控制模塊用于對(duì)各功能模塊設(shè)置訪問(wèn)權(quán)限,在權(quán)限控制模塊中將維護(hù)一張權(quán)限控制表,記錄某個(gè)用戶對(duì)各功能模塊是否具有訪問(wèn)權(quán)限;將各功能模塊的訪問(wèn)權(quán)限組合成一個(gè)或多個(gè)權(quán)限集合,形成角色,然后權(quán)限控制模塊可將權(quán)限集合(即角色)授權(quán)給一個(gè)或多個(gè)用戶,某個(gè)用戶就有了對(duì)部分功能模塊的訪問(wèn)權(quán)限。
[0049]所述授權(quán)服務(wù)模塊用于對(duì)用戶訪問(wèn)數(shù)據(jù)模塊的訪問(wèn)請(qǐng)求進(jìn)行訪問(wèn)權(quán)限檢測(cè);授權(quán)服務(wù)模塊作用是對(duì)用戶的訪問(wèn)請(qǐng)求進(jìn)行檢測(cè),所有對(duì)數(shù)據(jù)模塊的訪問(wèn)使用,都會(huì)經(jīng)過(guò)授權(quán)服務(wù)模塊來(lái)檢測(cè)其所屬的用戶及其訪問(wèn)權(quán)限,若用戶無(wú)權(quán)限訪問(wèn)數(shù)據(jù)模塊中的某一數(shù)據(jù),授權(quán)服務(wù)模塊將阻止其訪問(wèn)。
[0050]步驟40:代碼生成模塊再次執(zhí)行所述源代碼自動(dòng)生成腳本,然后檢測(cè)所述功能模塊和業(yè)務(wù)邏輯層是否存在變更,若是,則執(zhí)行步驟50 ;若否,則結(jié)束流程;
[0051]步驟50:結(jié)合所述元數(shù)據(jù)的權(quán)限定義中為各功能模塊所設(shè)置的權(quán)限,權(quán)限控制模塊為各功能模塊分別加上訪問(wèn)權(quán)限控制,生成具有權(quán)限控制的本地服務(wù)代碼。
[0052]可在所述源代碼自動(dòng)生成腳本的參數(shù)中設(shè)置是否生成對(duì)外服務(wù)接口(默認(rèn)為否),然后可再次執(zhí)行所述源代碼自動(dòng)生成腳本,判斷是否生成對(duì)外接口,若否,則結(jié)束流程;若是,則生成具有權(quán)限控制的對(duì)外服務(wù)接口 ;對(duì)外接口服務(wù)是面向服務(wù)的Internet應(yīng)用接口,它使用基于XML的消息處理作為基本的數(shù)據(jù)通訊方式,使用者可以通過(guò)網(wǎng)絡(luò)遠(yuǎn)程調(diào)用授權(quán)服務(wù)模塊判斷權(quán)限,進(jìn)而調(diào)用數(shù)據(jù)模塊為系統(tǒng)服務(wù)。
[0053]相對(duì)于現(xiàn)有的直接通過(guò)數(shù)據(jù)庫(kù)表進(jìn)行Java代碼生成的方法,本發(fā)明使用了 XML文本作為元數(shù)據(jù)的載體,不過(guò)度依賴于具體的數(shù)據(jù)庫(kù),將技術(shù)選擇推遲到后期,本發(fā)明按照元數(shù)據(jù)定義文件即所述元數(shù)據(jù)文件單獨(dú)進(jìn)行代碼生成,所述元數(shù)據(jù)文件可只對(duì)應(yīng)一張數(shù)據(jù)庫(kù)表,也可對(duì)應(yīng)多個(gè)耦合度高的庫(kù)表,且生成的源代碼文件按所述元數(shù)據(jù)文件分包,再分層分類,結(jié)構(gòu)更加簡(jiǎn)明清晰。本發(fā)明具有可維護(hù)性高、代碼一致性好、可重用性強(qiáng)等優(yōu)勢(shì),本發(fā)明通過(guò)在多個(gè)實(shí)際項(xiàng)目中的實(shí)踐,自動(dòng)生成的代碼占了整個(gè)系統(tǒng)源代碼的大部分,顯著提高了開(kāi)發(fā)效率,開(kāi)發(fā)人員僅大約占總?cè)藛T的40%,降低了人力成本。
【權(quán)利要求】
1.一種Java代碼生成方法,其特征在于:該方法需提供一模板模塊、數(shù)據(jù)解析模塊、代碼生成模塊和數(shù)據(jù)模塊,所述代碼生成模塊中定義有一源代碼自動(dòng)生成腳本;所述Java代碼生成方法的具體操作方法如下: 步驟10:將元數(shù)據(jù)進(jìn)行解釋定義,形成一元數(shù)據(jù)文件,并存儲(chǔ)于所述數(shù)據(jù)模塊中;所述元數(shù)據(jù)用于描述數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫(kù)中的要素及要素之間關(guān)聯(lián)關(guān)系信息的數(shù)據(jù); 步驟20:所述數(shù)據(jù)解析模塊提取所述元數(shù)據(jù)文件,并解析出元數(shù)據(jù),同時(shí)從所述模板模塊獲取代碼模板,并根據(jù)所述代碼模板封裝元數(shù)據(jù),把元數(shù)據(jù)轉(zhuǎn)換為模板對(duì)象,最后將所述代碼模板和模板對(duì)象交給代碼生成模塊;所述代碼模板中具有用于標(biāo)識(shí)所述模板對(duì)象的命名參數(shù); 步驟30:代碼生成模塊執(zhí)行所述源代碼自動(dòng)生成腳本,使用所述模板對(duì)象對(duì)所述代碼模板中的命名參數(shù)進(jìn)行賦值,生成復(fù)數(shù)個(gè)源代碼文件,并保存在數(shù)據(jù)模塊中且對(duì)應(yīng)于所述元數(shù)據(jù)文件所在位置處,該元數(shù)據(jù)文件所在位置處為:步驟10中元數(shù)據(jù)文件存儲(chǔ)在數(shù)據(jù)模塊中的地址位置。
2.如權(quán)利要求1所述的一種Java代碼生成方法,其特征在于:所述步驟10中的元數(shù)據(jù)定義為6種類型,包括實(shí)體定義、屬性定義、方法定義、關(guān)聯(lián)關(guān)系定義、異常定義和權(quán)限定義; 所述實(shí)體定義用于指定代碼的實(shí)體類,其對(duì)應(yīng)著一數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)表; 所述屬性定義用于指定實(shí)體類下的屬性,其對(duì)應(yīng)著一數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)表字段; 所述方法定義用于指定實(shí)體類下對(duì)一數(shù)據(jù)庫(kù)進(jìn)行操作的方法,其對(duì)應(yīng)著基本數(shù)據(jù)操作; 所述關(guān)聯(lián)關(guān)系定義用于指定各 實(shí)體類之間的引用關(guān)系,其對(duì)應(yīng)著一數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)表之間的關(guān)聯(lián)關(guān)系; 所述異常定義用于生成一實(shí)體類的異常類,以精確定位異常; 所述權(quán)限定義用于定義功能模塊,并為各功能模塊分別加上權(quán)限限制。
3.如權(quán)利要求2所述的一種Java代碼生成方法,其特征在于:所述復(fù)數(shù)個(gè)源代碼文件的邏輯架構(gòu)分為數(shù)據(jù)模型層、數(shù)據(jù)持久層和業(yè)務(wù)邏輯層;所述數(shù)據(jù)模型層與一數(shù)據(jù)庫(kù)對(duì)應(yīng),數(shù)據(jù)模型層中的每一實(shí)體類均對(duì)應(yīng)于該數(shù)據(jù)庫(kù)中的一數(shù)據(jù)庫(kù)表;所述數(shù)據(jù)庫(kù)持久層對(duì)應(yīng)于所述數(shù)據(jù)庫(kù)的基本數(shù)據(jù)操作;所述業(yè)務(wù)邏輯層為各功能模塊提供業(yè)務(wù)邏輯; 所述數(shù)據(jù)持久層調(diào)用數(shù)據(jù)模型層操作數(shù)據(jù)庫(kù),所述業(yè)務(wù)邏輯層調(diào)用數(shù)據(jù)持久層,把各種業(yè)務(wù)邏輯處理完的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)相關(guān)聯(lián)的數(shù)據(jù)庫(kù)表中,同時(shí)處理寫入過(guò)程中上報(bào)的異常,精確定位到具體實(shí)體類的何種異常。
4.如權(quán)利要求2所述的一種Java代碼生成方法,其特征在于:所述步驟30中,代碼生成模塊執(zhí)行所述源代碼自動(dòng)生成腳本后,代碼生成模塊還生成一權(quán)限控制模塊和一授權(quán)服務(wù)模塊;所述權(quán)限控制模塊用于對(duì)各功能模塊設(shè)置訪問(wèn)權(quán)限,所述授權(quán)服務(wù)模塊用于對(duì)用戶訪問(wèn)數(shù)據(jù)模塊的訪問(wèn)請(qǐng)求進(jìn)行訪問(wèn)權(quán)限檢測(cè); 所述Java代碼生成方法還包括以下內(nèi)容: 步驟40:代碼生成模塊再次執(zhí)行所述源代碼自動(dòng)生成腳本,然后檢測(cè)所述功能模塊和業(yè)務(wù)邏輯層是否存在變更,若是,則執(zhí)行步驟50 ;若否,則結(jié)束流程; 步驟50:結(jié)合所述元數(shù)據(jù)的權(quán)限定義中為各功能模塊所設(shè)置的權(quán)限,權(quán)限控制模塊為各功能模塊分別加上訪問(wèn)權(quán)限控制,生成具有權(quán)限控制的本地服務(wù)代碼。
5.如權(quán)利要求1所述的一種Java代碼生成方法,其特征在于:所述代碼生成模塊中還定義有一數(shù)據(jù)庫(kù)初始化生成腳本; 步驟20和步驟30之間還包括步驟21:代碼生成模塊執(zhí)行數(shù)據(jù)庫(kù)初始化生成腳本,并采用所述模板對(duì)象對(duì)所述代碼模板中的命名參數(shù)進(jìn)行賦值,生成數(shù)據(jù)庫(kù)建表腳本,并保存于數(shù)據(jù)模塊中。
6.如權(quán)利要求1所述的一種Java代碼生成方法,其特征在于:所述元數(shù)據(jù)文件為XML文檔格式文 件。
【文檔編號(hào)】G06F9/45GK103473108SQ201310349318
【公開(kāi)日】2013年12月25日 申請(qǐng)日期:2013年8月12日 優(yōu)先權(quán)日:2013年8月12日
【發(fā)明者】陳華光, 徐舒延, 王涵, 劉雅文 申請(qǐng)人:福建富士通信息軟件有限公司