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