本發(fā)明涉及敏捷計算機編程開發(fā)
技術領域:
:,尤其涉及一種編程友好型的敏捷代碼自動生成方法。
背景技術:
::隨著it行業(yè)的不斷發(fā)展,軟件開發(fā)的復雜度也隨著不斷提高。與此同時,軟件的開發(fā)團隊也越來越龐大,而如何更好地協(xié)同整個團隊進行高效準確的工作,從而確保軟件開發(fā)的質量已經(jīng)慢慢成為了開發(fā)過程中不可回避的問題。在軟件開發(fā)中,不同的功能模塊一般由不同的開發(fā)成員負責,同一功能模塊的各層代碼也可能是不同的開發(fā)成員編寫,經(jīng)驗告訴我們,模塊之間的問題是最難解決的,也是最耗費時間的。它需要多個開發(fā)人員相互協(xié)作找出問題,而協(xié)作過程中的溝通所消耗的時間成本是相當高的,而且還可能因為溝通的不足導致模塊返工。在這個過程中,當一個模型中涉及到多個表結構時,即使其涉及到字段的新增、修改和刪除,也需要重新進行代碼的制作,從而使得在代碼生成過程中,需要過多的人工參與以及需要大量的時間和人力進行重復性的代碼制作工作。現(xiàn)有技術中雖然也有一些代碼生成器,但其都是針對某一種特定的系統(tǒng)進行開發(fā)的,不具有通用性,也不可避免代碼制作過程中的重復性工作。可見,現(xiàn)有的代碼生成器一般是按照的一種特定的格式,生成一種特定框架定義好的目錄結構以及該特定框架事先定義的命名規(guī)則的文件,而在實際的項目中框架及目錄各方面應當由項目本身所定制,在使用過程中無法記錄歷史每一次腳本變更記錄,也不具備在同一次變更中的腳本自動合并的能力,局限性大,擴展性差。技術實現(xiàn)要素:為解決上述的技術問題,本發(fā)明提供了一種編程友好型的敏捷代碼自動生成方法,本發(fā)明提出的方法解決了現(xiàn)有技術下代碼生成器局限性大,擴展性差的問題。本發(fā)明實現(xiàn)上述技術效果所采用的技術方案是:一種編程友好型的敏捷代碼自動生成方法,所述方法包括以下步驟:s1、建立待生成的代碼的數(shù)據(jù)描述;s2、按邏輯功能模塊配置代碼模板;s3、將生成的數(shù)據(jù)描述輸入到描述解析器進行解析;s4、通過掃描相應的代碼模板的占位符,找到所述描述解析器解析出的相應的數(shù)據(jù)進行填充,組裝出對應功能模塊的初始代碼;s5、由代碼驗證器對生成的初始代碼進行驗證,驗證通過后將每個功能模塊對應的初始代碼按照邏輯結構進行合并組裝,同時單獨存儲每個功能模塊對應的初始代碼,最后將單個功能模塊對應的初始代碼以及合并組裝后的初始代碼分發(fā)給對應功能模塊的開發(fā)組。進一步地,在上述的編程友好型的敏捷代碼自動生成方法中,在所述步驟s1中,所述建立待生成的代碼的數(shù)據(jù)描述通過xml文檔進行建立生成。進一步地,在上述的編程友好型的敏捷代碼自動生成方法中,在步驟s3中,所述描述解析器對所述xml文檔進行解析的過程包括:s31、獲取根節(jié)點,通過庫函數(shù)elementdocument.getrootelement()獲取所述xml文檔的根節(jié)點;s32、獲取子節(jié)點元素,在獲得根節(jié)點之后,利用遞歸下降法從根節(jié)點尋找其子節(jié)點,構造語法樹;s33、獲得命令參數(shù),通過遍歷整個xml文檔結構,提取出所有的屬性,再按照非參數(shù)屬性識別規(guī)則排除整個xml文檔結構中的非參數(shù),生成命令文本模板,成對所述xml文檔的解析。進一步地,在上述的編程友好型的敏捷代碼自動生成方法中,在步驟s32中,從根節(jié)點尋找其子節(jié)點以構造語法樹的過程通過函數(shù)elementelement.getchild(stringname)和函數(shù)listelement.getchildren(stringname)完成,包括步驟:函數(shù)elementelement.getchild(stringname)從父節(jié)點得到名稱為name的單一子節(jié)點,函數(shù)返回值為空表示有0個元素;函數(shù)element.getchildren(stringname)用于獲取多個子元素,對于list中的每一個元素,通過list的迭代器獲取,list中的元素個數(shù)通過list的size()方法確定。進一步地,在上述的編程友好型的敏捷代碼自動生成方法中,在步驟s4中,對應功能模塊的初始代碼的組裝過程包括:s41、檢查所述描述解析器解析出的描述文件的文檔語法、組織結構是否無誤,驗證錄入的解析數(shù)據(jù)類型是否正確,如查出描述文檔的內容不符合文檔規(guī)定,則拋出異常信息;s42、讀取所述描述解析器解析出的描述文件,并抽取其中的解析數(shù)據(jù)并加載到內存中以待訪問;s43、將解析數(shù)據(jù)填入相應的初始代碼中。進一步地,在上述的編程友好型的敏捷代碼自動生成方法中,所述xml描述文件包括rml元素、system元素、actor元素、connect元素、editable元素、param元素、port元素、src_port元素、dest_port元素、src_actor元素和dest_actor元素中的部分或全部。進一步地,在上述的編程友好型的敏捷代碼自動生成方法中,在步驟s42中,讀取所述描述解析器解析出的描述文件的具體過程為:s421、以命令行為單位,每讀入一行進行分析,當遇到一個標題行時表示一個命令說明的開始,循環(huán)匹配直到出現(xiàn)另一個標題行時,表示結束對這個命令的說明;s422、將分析出的所有命令的結構化數(shù)據(jù)作為解析結果存放在列表容器中,供代碼模板對參數(shù)的提取以及代碼的生成。進一步地,在上述的編程友好型的敏捷代碼自動生成方法中,在步驟s421中,對命令行的分析采用表驅動的方式進行分析,該表為一個三維表,其中,第一維表示當前的分析狀態(tài),第二維表示當前輸入行,第三維的值為“0”或“1”,其中“0”元素表示動作,“1”元素表示下一個狀態(tài),通過執(zhí)行指定的動作并轉到下一個狀態(tài),循環(huán)對每一行進行分析。進一步地,在上述的編程友好型的敏捷代碼自動生成方法中,對應每個功能模塊的初始代碼均有序存儲在初始代碼容器中,每個功能模塊的初始代碼分別與合并組裝后的初始代碼進行一對一關聯(lián)映射,每個功能模塊具有指向與對應功能模塊開發(fā)組的代碼接收容器的指針,用于在相應的功能模塊的初始代碼在生成后分發(fā)至對應的模塊開發(fā)組的代碼接收容器。進一步地,在上述的編程友好型的敏捷代碼自動生成方法中,在步驟s33中,所述的非參數(shù)識別規(guī)則包括兩個規(guī)則項:屬性名識別規(guī)則和屬性值識別;判斷某屬性為非參數(shù)屬性的判斷規(guī)則為:當某個屬性同時滿足兩個規(guī)則項時,則該屬性被視為非參數(shù)屬性,若一個規(guī)則項為空則只要滿足另一個規(guī)則項,該屬性被視為非參屬性。本發(fā)明的有益效果是:本發(fā)明解決了現(xiàn)有技術下代碼生成器局限性大,擴展性差的問題,其基于多代碼模板的代碼生成與具體代碼的解耦,降低了代碼耦合度,提高了擴展性,可以很好地滿足定制化需求。針對每個功能模塊單獨生成對應的初始代碼,以及將各功能模塊按照邏輯結構進行合并組裝,使得軟件開發(fā)人員有一個全局的框架結構。通過將各獨立的功能模塊的對應初始代碼和合并組裝后的全局的初始代碼打包分發(fā)給相應的開發(fā)組,使得該相應功能模塊開發(fā)組的開發(fā)人員在獨立進行單功能模塊的開發(fā)過程中有一個較好的指導性框架,便于后期的調試和維護。附圖說明圖1為本發(fā)明實施例的流程圖。具體實施方式為了對本發(fā)明作出更加清楚完整地說明,下面結合附圖和本發(fā)明的具體實施例對本發(fā)明的技術方案作出進一步說明。如圖1所示,本發(fā)明提出的一種編程友好型的敏捷代碼自動生成方法,該方法包括以下步驟:s1、建立待生成的代碼的數(shù)據(jù)描述;可以通過輸入界面,如用戶接口ui界面,生成數(shù)據(jù)描述。由于數(shù)據(jù)描述語句是對用戶比較友好的,也可以由用戶手動輸入建立數(shù)據(jù)。數(shù)據(jù)描述包括按照預設規(guī)則語法進行定義的關鍵字和業(yè)務邏輯,由于xml文件能夠更好的體現(xiàn)結構層級關系、更容易被程序語言識別,同時也可以檢驗需求文檔是否符合語法邏輯。另外,xml文件是一種中間語言的角色,可以起到承上啟下的作用,每一個關鍵字都將成為xml中的一個元素,可以是一個node,也可以是一個屬性。在它轉化成xml后,會有節(jié)點名稱表示(如,節(jié)點里面是用于描述數(shù)據(jù)字典里的內容)。xml文檔具有文件格式良好、數(shù)據(jù)表達完整、驗證容易、便于程序訪問等特點。該xml文檔中的結構和組織由xmlscheme來定義,xmlscheme規(guī)定了業(yè)務模型必須提供的內容,具體包括業(yè)務組件名稱、包名、業(yè)務對象類名稱、屬性名稱、類型、長度、對應的數(shù)據(jù)表段長度。該xml描述文件包括rml元素、system元素、actor元素、connect元素、editable元素、param元素、port元素、src_port元素、dest_port元素、src_actor元素和dest_actor元素中的部分或全部。s2、按邏輯功能模塊配置代碼模板;根據(jù)功能需求,準備相應的代碼模板,如插入數(shù)據(jù)、刪除數(shù)據(jù)、查找數(shù)據(jù)、增加數(shù)據(jù)等等。模板是最終生成代碼的原型,根據(jù)模板可以生成規(guī)范和可用的代碼。良好的模板設計包含了軟件設計和開發(fā)人員多年的經(jīng)驗,確保了生成代碼的品質,并可以生成大部分的業(yè)務邏輯。涉及j2ee各層次的模板共五個,包括pojo.vm,pojo業(yè)務對象模板;dao.vm,業(yè)務對象的數(shù)據(jù)訪問接口模板;daohibernateimpl.vm,基于hibernate的數(shù)據(jù)訪問層接口實現(xiàn)模板;service.vm,服務層接口模板;servicempl.vmi,服務層接口實現(xiàn)模板。s3、將生成的數(shù)據(jù)描述輸入到描述解析器進行解析;具體的,在本發(fā)明的優(yōu)選實施例中,描述解析器對所述xml文檔進行解析的過程包括:s31、獲取根節(jié)點,通過庫函數(shù)elementdocument.getrootelement()獲取所述xml文檔的根節(jié)點;s32、獲取子節(jié)點元素,在獲得根節(jié)點之后,利用遞歸下降法從根節(jié)點尋找其子節(jié)點,構造語法樹;s33、獲得命令參數(shù),通過遍歷整個xml文檔結構,提取出所有的屬性,再按照非參數(shù)屬性識別規(guī)則排除整個xml文檔結構中的非參數(shù),生成命令文本模板,成對所述xml文檔的解析。在步驟s32中,從根節(jié)點尋找其子節(jié)點以構造語法樹的過程通過函數(shù)elementelement.getchild(stringname)和函數(shù)listelement.getchildren(stringname)完成,包括步驟:函數(shù)elementelement.getchild(stringname)從父節(jié)點得到名稱為name的單一子節(jié)點,函數(shù)返回值為空表示有0個元素;函數(shù)element.getchildren(stringname)用于獲取多個子元素,對于list中的每一個元素,通過list的迭代器獲取,list中的元素個數(shù)通過list的size()方法確定。在步驟s33中,所述的非參數(shù)識別規(guī)則包括兩個規(guī)則項:屬性名識別規(guī)則和屬性值識別;判斷某屬性為非參數(shù)屬性的判斷規(guī)則為:當某個屬性同時滿足兩個規(guī)則項時,則該屬性被視為非參數(shù)屬性,若一個規(guī)則項為空則只要滿足另一個規(guī)則項,該屬性被視為非參屬性。s4、通過掃描相應的代碼模板的占位符,找到所述描述解析器解析出的相應的數(shù)據(jù)進行填充,組裝出對應功能模塊的初始代碼;在步驟s4中,對應功能模塊的初始代碼的組裝過程包括:s41、檢查所述描述解析器解析出的描述文件的文檔語法、組織結構是否無誤,驗證錄入的解析數(shù)據(jù)類型是否正確,如查出描述文檔的內容不符合文檔規(guī)定,則拋出異常信息;s42、讀取所述描述解析器解析出的描述文件,并抽取其中的解析數(shù)據(jù)并加載到內存中以待訪問;s43、將解析數(shù)據(jù)填入相應的初始代碼中。在步驟s42中,讀取所述描述解析器解析出的描述文件的具體過程為:s421、以命令行為單位,每讀入一行進行分析,當遇到一個標題行時表示一個命令說明的開始,循環(huán)匹配直到出現(xiàn)另一個標題行時,表示結束對這個命令的說明;s422、將分析出的所有命令的結構化數(shù)據(jù)作為解析結果存放在列表容器中,供代碼模板對參數(shù)的提取以及代碼的生成。在步驟s421中,對命令行的分析采用表驅動的方式進行分析,該表為一個三維表,其中,第一維表示當前的分析狀態(tài),第二維表示當前輸入行,第三維的值為“0”或“1”,其中“0”元素表示動作,“1”元素表示下一個狀態(tài),通過執(zhí)行指定的動作并轉到下一個狀態(tài),循環(huán)對每一行進行分析。對應每個功能模塊的初始代碼均有序存儲在初始代碼容器中,每個功能模塊的初始代碼分別與合并組裝后的初始代碼進行一對一關聯(lián)映射,每個功能模塊具有指向與對應功能模塊開發(fā)組的代碼接收容器的指針,用于在相應的功能模塊的初始代碼在生成后分發(fā)至對應的模塊開發(fā)組的代碼接收容器。在步驟s43中,解析數(shù)據(jù)填入初始代碼的過程是:該解析數(shù)據(jù)按照規(guī)定格式進行套取,加載到對應的結點和常量替換,從而生成初步的代碼規(guī)范,并對應的生成包含映射類、實體類、接口類、業(yè)務邏輯類四個文件。并根據(jù)設置的屬性,添加包結構和路徑,以及引用、備注、版本信息,生成對應的業(yè)務層代碼。s5、由代碼驗證器對生成的初始代碼進行驗證,驗證通過后將每個功能模塊對應的初始代碼按照邏輯結構進行合并組裝,同時單獨存儲每個功能模塊對應的初始代碼,最后將單個功能模塊對應的初始代碼以及合并組裝后的初始代碼分發(fā)給對應功能模塊的開發(fā)組。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內。當前第1頁12當前第1頁12