專利名稱::一種基于asn類型對象的代碼生成方法
技術領域:
:本發(fā)明涉及ASN和代碼自動生成技術,具體涉及一種基于ASN類型對象結構,
背景技術:
抽象文法表示法ASN,是用于描述不同系統(tǒng)之間通訊時所用的數(shù)據(jù)結構的抽象描述。它是一種用于描述結構化客體的結構和內容的語言,是描述在網絡上傳輸信息格式的標準方法,類似與高級程序設計語言的數(shù)據(jù)描述部分。在通訊及其相關的行業(yè)中,特別是傳輸網管軟件系統(tǒng)的設計多采用軟總線方式,如ASN的類型對象結構,來實現(xiàn)各個模塊之間的數(shù)據(jù)通訊,由于數(shù)據(jù)庫模塊是整個軟件系統(tǒng)ASN對象進行通訊的總集散模塊,頻繁使用ASN對象,數(shù)據(jù)庫采用的是關系型數(shù)據(jù)庫,將ASN定義的網元類型對象映射到數(shù)據(jù)庫DB的網元表的過程,需要編寫大量的數(shù)據(jù)庫出庫和入庫的代碼,時間和人工編寫代碼,并且編寫代碼的復雜度增高,映射關系的翻譯麻煩復雜且效率低。另一方面,這種映射和數(shù)據(jù)出庫及入庫的操作是有共性的,便于采用規(guī)則自動實現(xiàn)ASN的對象映射數(shù)據(jù)庫表的結構,還可采用規(guī)則利用數(shù)據(jù)存取對象DAO模式生成ASN對象出/入庫的程序源代碼。
發(fā)明內容本發(fā)明需要解決的技術問題是如何提供一種基于ASN類型對象的代碼生成方法,克服ASN對象存儲到數(shù)據(jù)庫表的實現(xiàn)技術難度,解決現(xiàn)有技術手工編寫大量的數(shù)據(jù)庫出庫和入庫代碼和數(shù)據(jù)庫表定義腳本代碼費時費力并且開發(fā)效率不高的問題。本發(fā)明的上述技術問題這樣解決,提供一種基亍ASN類型對象的代碼生成方法,其特征在于,包括以下具體步驟1.1)根據(jù)規(guī)范定義ASN對象的類型結構描述,并形成對應的程序源文件;1.2)根據(jù)所述結構描述和對應的程序源文件生成代碼產生工具;1.3)根據(jù)所述ASN對象與對應的關系數(shù)據(jù)庫表之間的映射規(guī)則編寫對應映射^見則文件;1.4)利用所述代碼產生工具并輸入所述映射規(guī)則文件自動生成被調用的數(shù)據(jù)庫出/入庫源代碼和被嵌入的數(shù)據(jù)庫腳本代碼。按照本發(fā)明提供的代碼生成方法,所述方法還包括步驟1.5)在數(shù)據(jù)庫模塊中集成所述源代碼,并在數(shù)據(jù)庫中嵌入所述腳本代碼。按照本發(fā)明提供的代碼生成方法,所述步驟U)中的規(guī)范可以是傳輸網絡管理系統(tǒng)的F口規(guī)范或軟件系統(tǒng)內各個模塊之間的通訊規(guī)范。按照本發(fā)明提供的代碼生成方法,所述步驟1.1)中的形成可以是通過SNACC編譯器自動生成,也可通過其他編譯器。按照本發(fā)明提供的代碼生成方法,所述步驟1.2)中代碼產生工具包括ASN結構定義描述模塊,ASN翻譯模塊,映射文件語法分析器,對象與關系映射定義模塊,ASN元數(shù)據(jù)提供模塊和代碼生成器。按照本發(fā)明提供的代碼生成方法,所述對象與關系映射定義模塊包括一整套數(shù)據(jù)出/入庫SQL調用方法,這些方法集成到一個sql文件中,存放在自動生成工具使用的參數(shù)-script的目錄中。按照本發(fā)明提供的代碼生成方法,所述步驟1.3)具體包括1.3.1)利用所述代碼產生工具和ASN對象生成與所述ASN對象對應的供修改的映射規(guī)則文件;1.3.2)根據(jù)具體的映射規(guī)則、個性和需要修改所述供修改的映射規(guī)則文件。按照本發(fā)明提供的代碼生成方法,所迷個性包括接口中個性4吏用的數(shù)據(jù)出/入庫SQL調用方法。按照本發(fā)明提供的代碼生成方法,所述需要包括軟件系統(tǒng)各個模塊通訊功能的需要。按照本發(fā)明提供的代碼生成方法,所述步驟1.4)還包括所述源代碼和腳本代碼被自動輸出至指定的目錄中。本發(fā)明提供的代碼生成方法,由于將自動編碼技術應用到具體的ASN對象與數(shù)據(jù)庫映射和出/入庫中,同人工編寫出庫入庫代碼和設計編寫數(shù)據(jù)庫表結構腳本相比,具有以下的幾個優(yōu)點1.極大的提高了開發(fā)的效率和節(jié)約了開發(fā)時間,降低了開發(fā)成本;2.提供了一整套數(shù)據(jù)庫出庫和入庫的方法,同時也可以靈活定制數(shù)據(jù)庫接口的方法,調用的靈活度高;3.降低了數(shù)據(jù)庫模塊編寫出庫和入庫方法的復雜度和技術實現(xiàn)難度,模塊的封裝性好;另外,生成的數(shù)據(jù)庫表的腳本,支持不同的數(shù)據(jù)庫使用;而且整個編譯器支持不同的平臺使用,適合不同操作系統(tǒng)的開發(fā)平臺使用;同時,本發(fā)明對使用人員有一定的技術要求,需要具有軟件開發(fā)的基本知識和數(shù)據(jù)庫開發(fā)使用的基本知識,是提供給專業(yè)開發(fā)的人員使用的,使用人員掌握了使用的技能,對開發(fā)數(shù)據(jù)庫才莫塊的接口程序起到事半功倍的效果。下面結合附圖和具體實施例進一步對本發(fā)明進行詳細說明。圖1是一種ASN類型結構與數(shù)據(jù)庫中表結構的具體映射關系示意圖。圖2是另一種ASN類型結構與數(shù)據(jù)庫中表結構的具體映射關系示意圖。圖3是利用本發(fā)明代碼生成工具DAOBuilder開發(fā)數(shù)據(jù)訪問功能模塊的流程圖示意圖。具體實施方式首先,說明映射ASN類型的實例是ASN對象,ASN對象映射數(shù)據(jù)庫的表結構就是ASN類型結構映射到數(shù)據(jù)庫中表的結構過程,如圖1、2中所描述的,定義了一個ASN的網元類型為ManagedElement-T,它映射到網元表,映射關系圖l是l:1的關系、圖2是1:N的關系,在1:1的映射關系中,每個網元類型的屬性對應一個網元表的字段,對于網元參數(shù)的屬性,ASN類型采用的是名值對數(shù)據(jù)列表,映射到網元表中的網元參數(shù)字段,字段的值存放形式是采用壓縮值的方式將多個網元參數(shù)壓縮成一個壓縮字串進行存放;在1:N中的映射關系中,網元類型ManagedElement-T的網元參數(shù)映射到網元主表的方式是建立網元參數(shù)從表的網元參數(shù)ID,映射到網元參數(shù)從表的方式是將網元參數(shù)——存入表中,不采用壓縮的方式存儲。ASN中的SEQUENCE類型在映射的過程中稱為Class,是映射的基本單位,class的實例稱為對象,通常保存為數(shù)據(jù)庫表中的一條記錄。第二步,說明本發(fā)明代碼生成工具DAOBuilder:該工具用于自動產生數(shù)據(jù)庫的出入庫代碼,實現(xiàn)ASN類型與數(shù)據(jù)庫表的對象與關系映射。這個工具根據(jù)預先編寫的ASN結構與數(shù)據(jù)庫表之間的映射XML文件,產生ASN對象的入庫、出庫代碼,并產生相應的數(shù)據(jù)庫腳本。該代碼生成工具具體由ASN結構定義描述模塊,ASN翻譯模塊,映射文件語法分析器,對象與關系映射定義模塊,ASN元數(shù)據(jù)提供模塊,代碼生成器六個部分組成。最后,以自定義ASN的網元類型和設備單板類型利用該代碼生成工具DAOBuilder自動編碼的方式開發(fā)數(shù)據(jù)庫功能模塊為例,結合圖3,對本發(fā)明做進一步描述,包括五個步驟,分別是(-)定義ASN類型結構描述根據(jù)傳輸網絡管理系統(tǒng)的F口規(guī)范的ASN結構或軟件系統(tǒng)各個模塊通訊規(guī)范的ASN結構,形成需要進行存儲tt據(jù)到數(shù)據(jù)庫的ASN類型結構描述,生成結構描述的程序源文件;G生成能自動生成代碼的工具集成結構描迷的程序源文件,編寫生成能被集成的ASN結構描述接口定義代碼,集成映射文件語法分析器M,對象與關系映射定義模塊32,ASN元數(shù)據(jù)提供模塊33,代碼生成器34,利用ASN翻譯模塊和開發(fā)系統(tǒng)編譯模塊聯(lián)合生成能自動生成代碼的工具;集成結構描述文件的目的是將通過SNACC編譯器編譯ASN結構描述文件生成的〔++等源文件綁定到自動生成代碼的工具中,以編譯環(huán)境集成的方式實現(xiàn),比如將網元的ASN文件編譯后生成了網元的C+十源文件,然后通過編譯文件makefile的方式將其集成到自動生成代碼的工具中;編寫生成能被集成的ASN結構描述接口定義代碼是將生成的ASN結構的描述結構類型定制到自動生成代碼的工具的main.cpp的文件中,以結構數(shù)組的方式存在,同是將所需要的頭文件填寫其中;集成映射文件語法分析器是已經開發(fā)完畢的ASN語法解析的功能模塊,是處理ASN結構映射到表和數(shù)據(jù)庫結構的解析翻譯工作;對象與關系映射定義模塊是處理映射關系實現(xiàn)的功能模塊,實現(xiàn)l:l和l:n的映射關系;ASN元數(shù)據(jù)提供模塊是將解析和映射的ASN關系以元數(shù)據(jù)的方式提供給自動生成代碼的模塊,是以數(shù)據(jù)基礎的方式存在;代碼生成器是集合上述的功能模塊,通過解析和映射的關系和ASN的元數(shù)據(jù)集合,生成數(shù)據(jù)庫接口的中間源代碼和生成數(shù)據(jù)庫表的代碼;Q根據(jù)ASN類型結構描述編寫映射的xml規(guī)則文件1.根據(jù)ASN類型結構描述,利用生成的這個工具翻譯選定的某一個ASN類型,生成映射規(guī)則文件中class的結構雛形,存入手工編寫的xml規(guī)則文件;2.手工^f奮改規(guī)則文件中class的結構,按照ASN類型映射到數(shù)據(jù)庫表的映射關系進行設計編寫規(guī)則class的結構,定義好接口中個性使用的SQL調用方法;這個自定義的sql方式是根據(jù)ASN的結構屬性,根據(jù)業(yè)務的需要定義某個或某些屬性的數(shù)據(jù)庫操作的方式。3.根據(jù)軟件系統(tǒng)各個模塊通訊功能的需要定義好不同的映射規(guī)則,形成設計好的文件,以便:故能自動生成代碼的工具4吏用;卿工具采用規(guī)則文件作為入口,自動生成源代碼和數(shù)據(jù)庫腳本文件編寫生成代碼使用的配置文件(如makefile文件),或自動生成代碼的批處理文件,定制好工具使用自動生成代碼的命令格式和輸出的路徑,使用工具生成程序源代碼和數(shù)據(jù)庫腳本,輸出到制定的目錄中;(S)集成自動生成的源代碼到數(shù)據(jù)庫模塊中,使用自動生成的數(shù)據(jù)庫腳本到數(shù)據(jù)庫中生成應用表,完成代碼的自動生成和使用;其中,每一步的具體實現(xiàn)是(-)自定義網元類型ManagedElement-T和設備單板類型Equipment-T,形成ASN結構描述文件,編譯生成ASN類型對應的源代碼文件,具體包括步驟(1-1):定義網元類型和單板類型,存入網元的managedElement.asnl和設備單板的equipment.asnl網元類型的結構定義ManagedElement-T::=SEQUENCE{nameNamingAttributes-T,網元名牙爾userLabelGraphicString(80),用戶標簽meParametersNVSL.ist-T,網元參凄t列表additionallnfoNVSList-T附加屬性設備單板類型的結構定義Equipment-TSEQUENCE{nameNamingAttributes-T,單4反名稱、userLabelGraphicString(80),用戶標簽boardParametersNVSList-T單板參數(shù)su卯ortOperationsValueNVSList-T單板參數(shù)取值范圍和缺省值additionallnfoNVSList-T附力口屬寸生單板的ASN文件,生成它們對應的源代碼文件managedElement.cpp和managedElement.h以及equipment.cpp詳口equipment.h。仁)編譯生成工具DAOBUILDER,具體包括步驟(2-1):將網元類型的結構描述ManagedElementModuleDesc和設備單4反的結構描述加入工具DAOBuiWer的入口代碼里的ASNModuleDesc隊列中;constAsnModuleDesc*buidlerAsnModuleDescs[]=&ManagedElementModuleDesc,&EquipmentModuleDesc,NULL(2-2):集成ASN結構描述文件生成的源代碼文件,將這些源文件的頭文件managedElement.h,equipment.h定制至UDAOBuilder的Main.cpp中,建立起了ASN描述文件同工具DAOBuilder的聯(lián)系。(2-3):編譯已經集成好的DAOBuilder編譯器,生成可以執(zhí)行的文件。曰編寫映射規(guī)則文件resource.xml,具體包括步驟(3-1):使用工具DAOBuilder,根據(jù)命令參數(shù)的選擇生成ASN結構描述ManagedElement-T和Equipment-T到失見則文件中class的基本映射,也可以采用手工的方式進行編寫規(guī)則class的定義結構;(3-2):定義映射到數(shù)據(jù)庫表的名稱和主鍵,如網元的數(shù)據(jù)庫表的名稱為ME,主鍵為name.name和name.value,是網元屬性中的名值對,定義各個屬性映射到表的字段的長度;(3-3):根據(jù)數(shù)據(jù)庫的性能和功能設計的需要,設計表中特殊字段的處理^見則。如網元表,確定好網元參數(shù)映射到網元表的字段MeParameters是采用壓縮的方式存儲list形式的值,具體的設計見class的結構說明,如下<classid="ManagedElement—T"name="ManagedElement—T"dao國name-"MEDAO"table="ME"name-strategy="fiiir><propertyname="name.name"column="Name—Name"length="207><propertyname="name.value"column-"Name一Value"length="607><propertyname="userLabel"column="UserLaberlength="80"/>〈arrayname="meParameters"column="MeParameters"length="800"><primarykey><keyname-"name"/></primarykey></array><arrayname="additionalInfo"column="AdditionalInfo"length="500"><primarykey><keyname="name"/></primarykey></array>〈primarykey〉<keyname="name.name"/><keyname="name.value7></primarykey></class>這是網元的ASN結構映射到規(guī)則文件中class的結構,內部定義了數(shù)據(jù)庫表的名稱ME,ASN的屬性對應ME表的字段定義,表的主4走定義。網元參數(shù)meParameters,采用的是壓縮的形式將網元的參數(shù)存入到網元表的MeParameters字段內,網元的附加屬性也是采用壓縮的方式存儲到網元表的字段內;另一方面,可以定義接口中個性使用的SQL調用方法,具體可以是在規(guī)則定制的class中,填寫<select-sqlname="findByResource"where="%resoiirceObjectlike"/〉<update-sqlname="setActive"set="%ifActive="where="%ruleid.namelikeand%ruleid.valuelike"/><delete-sqlname="deleteByRuleid"where="%ruleid.namelikeand%ruleid.valuelike"/>卿使用工具DAOBuilder自動生成源文件和數(shù)據(jù)庫表腳本文件,具體包括步驟(4-1):編寫makefile文件,定義DAOBuilder的輸入規(guī)則文件resource.xml和輸出路徑;(4-2):執(zhí)行工具DAOBuilder,將數(shù)據(jù)庫腳本文件和自動生成的源代碼輸出到指定的目錄,源文件為resource-map.h、resource-map.cpp、resource-map-rdb.h'resource-map-rdb.cpp,凄史才居庫腳本為resource.sql;(5)集成自動生成的源文件到系統(tǒng)的數(shù)據(jù)庫功能模塊中,使用自動生成的出入庫的接口方法,在數(shù)據(jù)庫中生成數(shù)據(jù)庫表ME,Equipment,包括具體步驟(5-1):使用數(shù)據(jù)庫腳本resource.sql,在DBMS類型的數(shù)據(jù)庫中生成表ME和Equipment(5-2):集成自動生成的源文件到數(shù)據(jù)庫模塊database中,可以編譯使用這些自動生成的源文件(5-3):在數(shù)據(jù)庫模塊database內調用網元和i殳備單板的出庫和入庫的方法,這些方法的調用方式如下聲明DAO類工廠的網元DAO,如auto_ptr<MEDAO>pMEDAO(GetDAOFactory()->getMEDAO(GetConnectionO";(a):根據(jù)共同父類繼承通用入庫方法ManagedElement—Tme;pMEDAO-〉insert(me);(b):根據(jù)共同父類繼承通用出庫方法pMEDAO->findAll();pMEDAO->fmdByCriteria(條件);(c):根據(jù)需要靈活定制數(shù)據(jù)庫處理的方法。權利要求1、一種基于ASN類型對象的代碼生成方法,其特征在于,包括以下具體步驟1.1)根據(jù)規(guī)范定義ASN對象的類型結構描述,并形成對應的程序源文件;1.2)根據(jù)所述結構描述和對應的程序源文件生成代碼產生工具;1.3)根據(jù)所述ASN對象與對應的關系數(shù)據(jù)庫表之間的映射規(guī)則編寫對應映射規(guī)則文件;1.4)利用所述代碼產生工具并輸入所述映射規(guī)則文件自動生成被調用的數(shù)據(jù)庫出/入庫源代碼和被嵌入的數(shù)據(jù)庫腳本代碼。2、根據(jù)權利要求1所述代碼生成方法,其特征在于,所述方法還包括步驟1.5)在數(shù)據(jù)庫模塊中集成所述源代碼,并在數(shù)據(jù)庫中嵌入所述腳本代碼。3、根據(jù)權利要求1所述代碼生成方法,其特征在于,所述步驟1.1)中的規(guī)范可以是傳輸網絡管理系統(tǒng)的F口規(guī)范或軟件系統(tǒng)內各個模塊之間的通訊規(guī)范。4、根據(jù)權利要求1所述代碼生成方法,其特征在于,所述步驟l.l)中的形成可以是通過SNACC編譯器自動生成。5、根據(jù)權利要求1所述代碼生成方法,其特征在于,所述步驟1.2)中代碼產生工具包括ASN結構定義描述模塊,ASN翻譯模塊,映射文件語法分析器(31),對象與關系映射定義模塊(32),ASN元數(shù)據(jù)提供模塊(33)和代碼生成器(34)。6、根據(jù)權利要求1或5所述代碼生成方法,其特征在于,所述對象與關系映射定義模塊(32)包括一整套數(shù)據(jù)出/入庫SQL調用方法。7、根據(jù)權利要求1所述代碼生成方法,其特征在于,所述步驟1.3)具體包括1.3.1)利用所述代碼產生工具和ASN對象生成與所述ASN對象對應的供修改的映射規(guī)則文件;1.3.2)根據(jù)具體的映射規(guī)則、個性和需要修改所述供修改的映射規(guī)則文件。8、根據(jù)權利要求6或7所述代碼生成方法,其特征在于,所述個性包括接口中個性使用的數(shù)據(jù)出/入庫SQL調用方法。9、根據(jù)權利要求7所述代碼生成方法,其特征在于,所述需要包括軟件系統(tǒng)各個模塊通訊功能的需要。10、根據(jù)權利要求1所述代碼生成方法,其特征在于,所述步驟1.4)還包括所述源代碼和腳本代碼被自動輸出至指定的目錄中。全文摘要本發(fā)明涉及一種基于ASN類型對象的代碼生成方法,包括定義ASN對象形成對應的程序源文件;生成代碼產生工具;編寫對應映射規(guī)則文件;利用所述代碼產生工具并輸入所述映射規(guī)則文件自動生成被調用的數(shù)據(jù)庫出/入庫源代碼和被嵌入的數(shù)據(jù)庫腳本代碼。這種方法徹底克服ASN對象存儲到數(shù)據(jù)庫表的實現(xiàn)技術難度,解決了現(xiàn)有技術手工編寫大量的數(shù)據(jù)庫出庫和入庫代碼和數(shù)據(jù)庫表定義腳本代碼費時費力并且開發(fā)效率不高的問題。文檔編號G06F17/30GK101154227SQ20061015234公開日2008年4月2日申請日期2006年9月26日優(yōu)先權日2006年9月26日發(fā)明者崔文生,張立國申請人:中興通訊股份有限公司