專利名稱:一種通過分類配置自動生成代碼的方法及系統(tǒng)的制作方法
技術領域:
本發(fā)明屬于計算機程序開發(fā)技術領域,涉及一種自動生成代碼的方法,尤其涉及一種通過分類配置自動生成代碼的方法;同時,本發(fā)明還涉及一種通過分類配置自動生成代碼的系統(tǒng)。
背景技術:
在傳統(tǒng)軟件開發(fā)方法中,開發(fā)一套信息管理系統(tǒng),需要通過標準的軟件開發(fā)生命周期,如典型的瀑布式開發(fā)分為以下幾個階段需求調研、概要設計、詳細設計、程序開發(fā)、單元測試、集成測試、系統(tǒng)測試等過程才能完成整個信息管理系統(tǒng)的開發(fā)。這其中由于項目規(guī)模的大小不同,而每個階段的工作量比重略有不同;一般來說詳細設計、程序開發(fā)和單元測試的總工作量超過整個生命周期工作量的60%。但是實際所有基于數據庫開發(fā)的信息管理系統(tǒng),80%的界面操作、用戶需求都有著 高度的類同點。常見程序都采用MVC結構,MVC是由Model (模型)層、View (視圖)、Controller(控制器)層組成。Model (模型)放置業(yè)務實體,表示操作數據;View (視圖)放置Π模板文件,負責展示輸出結果!Controller (控制器)放置Controller類,處理URL請求。但是由于View和Controller層次的實現的復雜性和不確定性,難以實現根據配置自動生成,生成的代碼也難以被組合和擴展。有鑒于此,如今迫切需要設計一種可以有效降低在完成“詳細設計、程序開發(fā)、單元測試”等階段工作量的方法。
發(fā)明內容
本發(fā)明所要解決的技術問題是提供一種通過分類配置自動生成代碼的方法,可根據配置記錄自動生成程序代碼,實現整個軟件開發(fā)流程基本無需詳細設計、程序開發(fā)和單元測試,大幅減少整個軟件開發(fā)周期的工作量和開發(fā)時間,同時也大幅提高目標系統(tǒng)的質量。此外,本發(fā)明還提供一種通過分類配置自動生成代碼的系統(tǒng),可統(tǒng)一生成所有相關實現代碼,生成的代碼可集成統(tǒng)一的權限控制框架和其它業(yè)務邏輯,并且每個模塊支持預設的常見操作功能。為解決上述技術問題,本發(fā)明采用如下技術方案一種通過分類配置自動生成代碼的方法,所述方法包括如下步驟配置信息定義步驟將系統(tǒng)菜單、模塊、每個模塊的功能、每個模塊的界面內容定義分類記錄在配置信息中;內容分離步驟MVC三層結構包括視圖View層、模型Model層、控制器ControlIer層,通過將整個系統(tǒng)程序結構中MVC三層結構中的View層和Model層的內容都分離為可以和每個數據庫表相對應的文件;
信息自動同步步驟設定數據綁定機制,讓View層的表現內容和Model層的數據根據配置信息實現自動同步;邏輯操作信息獲取步驟通過View層和Model層的同步機制,Controller層通過配置信息獲取當前模塊的各類邏輯操作的必要信息,從而完成公共操作的實現,并且這些Controller被擴展來實現類似邏輯;程序自動生成步驟讓自動生成程序根據配置信息生成目標系統(tǒng)文件,同時生成的程序文件可以被組合應用在各種業(yè)務應用場景下。作為本發(fā)明的一種優(yōu)選方案,內容分離步驟中,將View層和Model層的內容都分離為可以和每個數據庫表相對應的文件的流程具體包括
將View層的涉及的每個數據庫表生成對應的頁面,包括查詢字段部分頁面文件、只讀列表部分頁面文件、彈出窗口查詢字段部分頁面文件、彈出窗口只讀列表部分頁面文件、可編輯列表部分頁面文件、可編輯表單部分頁面文件、只讀表單部分頁面文件;所述數據庫表包括主表,或者還包括一級或多級子表;為該模塊生成若干個總的操作頁面,包括整個模塊的列表頁面、整個模塊的可編輯頁面、整個模塊的彈出窗口列表頁面;整個模塊的列表頁面引用主表的查詢字段部分頁面文件和只讀列表部分頁面文件;整個模塊的可編輯頁面引用主表的可編輯表單部分頁面文件和所有直接子表的可編輯列表部分頁面文件;整個模塊的彈出窗口列表頁面引用主表的彈出窗口查詢字段部分頁面文件和彈出窗口只讀列表部分頁面文件;如果該模塊只有主表,沒有子表,則無需生成子表相關的內容;再為該模塊的所有子表生成若干可編輯頁面,引用該子表的可編輯表單部分頁面文件和該子表所有直接子表的可編輯列表部分頁面文件;此外還為每個頁面引用到的所有字段名稱可以生成對應的資源文件,用于多語言的切換;將Model層的內容分離為文件的過程采用ORMapping框架實現;數據庫外鍵統(tǒng)一分為兩種主從表關系,非主從表的代碼名稱對應關系;外鍵關系通過ORMapping框架的對象關聯來實現。作為本發(fā)明的一種優(yōu)選方案,所述信息自動同步步驟中設定數據綁定機制的流程包括每個頁面對應一個當前頁面的Page對象,該對象當中可保存所有相關的頁面信息、相關數據庫對象;在系統(tǒng)后臺邏輯執(zhí)行完畢后,系統(tǒng)可將該Page對象序列化為一個byte數組,再通過base64編碼和zip壓縮成一個字符串后放在頁面的一個隱含字段中;當頁面提交時候,后臺代碼可在請求中獲取該隱含字段的值,通過反序列化獲取該頁面提交前的Page對象,再將頁面提交的新值和變化附加到該Page對象中,從而在后臺代碼中始終能夠獲得頁面的所有相關信息,然后可以實現將當前模塊相關的數據對象始終保留在Page對象中,并且可以讓該數據對象和頁面最新內容保持同步;將頁面提交的值附加到Page對象中的對應,通過讀取該模塊的配置來確定哪些信息需要附加,如何對應附加;而頁面顯示時候,讓頁面每個字段顯示Page對象內的對應的對象值,可通過自定義代碼直接讀取Page對象或者統(tǒng)一將Page對象中的屬性值放置在請求request的屬性attribute中,從而可以利用已有的第三方類庫;此外在發(fā)生異?;貪L時候,可以利用原Page對象而返回到頁面原始情況;從而實現在任意頁面轉向中保持界面元素和數據對象的自動無縫綁定。作為本發(fā)明的一種優(yōu)選方案,所述邏輯操作信息獲取步驟中,Controller層通過配置信息獲取當前模塊的各類邏輯操作的必要信息包括如下步驟在所有頁面提交中包含以下變量當前頁面的路徑、頁面對象的序列化字符串、當前菜單編號、當前菜單類型、當前模塊的編號、當前主表的表名加主鍵字段名、當前主表的主鍵值、當前子表的表名加主鍵字段名、當前子表的主鍵值原、查詢條件對象的序列化字符串;根據頁面表單提交的當前模塊編號定義字段的值來從配置中獲得當前模塊對應 的數據庫對象,從而在查詢操作中可動態(tài)拼接數據庫SQL語句,在保存操作中,通過當前模塊的字段定義配置,動態(tài)的將頁面表單內容附加到數據庫對象中,完成數據庫操作;數據庫事務控制可通過程序運行容器、第三方類庫或者數據庫自身提供的機制實現。作為本發(fā)明的一種優(yōu)選方案,所述邏輯操作信息獲取步驟中,Controller被擴展來實現類似邏輯的流程包括如下步驟在Controller層次,使用面向切面編程AOP來實現對每個Controller的攔截來附加商業(yè)邏輯;或者,所有Controller繼承祖先類,在祖先類中實現Controller自身邏輯實現的攔截;或者,通過組合ContiOller的不同數據庫對象的新增、刪除、修改、查詢的邏輯,來實現需要的擴展的業(yè)務邏輯;在View層次,大部分擴展邏輯可在頁面邏輯擴展目錄下的頁面中增加,或者直接修改生成頁面目錄下面的頁面;權限系統(tǒng)采用權限、角色、角色所屬權限、用戶、用戶所屬角色表結構;系統(tǒng)菜單使用典型的頂部下拉式菜單,或者采用右側可收縮樹形菜單,或者采用圖標導航方式;權限系統(tǒng)和系統(tǒng)菜單都屬于一次性代碼,可重復使用;權限控制通過Filter或面向切面編程AOP來實現,并且利用每個模塊的當前模塊菜單編號傳參來判斷;系統(tǒng)菜單通過將每個具體模塊放置在內置頁面容器,如iframe中來實現和每個具體模塊集成使用。作為本發(fā)明的一種優(yōu)選方案,所述程序自動生成步驟中,自動生成程序根據配置信息生成目標系統(tǒng)文件的流程包括通過配置信息定義步驟設定的配置信息,按照如下順序,為每個模塊逐步生成下列文件每個模塊對應的數據庫表結構;每個模塊的數據庫對象配置;每個模塊的數據庫對象;每個模塊的所有操作功能對應的Controller代碼;每個模塊的每張表對應的只讀列表內容,可編輯列表內容,搜索條件表單內容,可編輯表單內容,只讀表單內容頁面;每個模塊的每張表的特殊邏輯附加頁面;每個模塊的每張表的字段驗證代碼頁面;
每個模塊的列表頁面;每個模塊的編輯頁面;每個模塊的彈出窗口用的列表頁面。作為本發(fā)明的一種優(yōu)選方案,所述公共操作包括搜索、新增、修改、保存、刪除、批量刪除中的一種或多種。一種通過分類配置自動生成代碼的系統(tǒng),所述系統(tǒng)包括配置信息定義單元,用以將系統(tǒng)菜單、模塊、每個模塊的功能、每個模塊的界面內容定義分類記錄在配置信息中;
內容分離單元,MVC三層結構包括視圖View層、模型Model層、控制器Controller層,所述內容分離模塊通過將整個系統(tǒng)程序結構中MVC三層結構中的View層和Model層的內容都分離為可以和每個數據庫表向對應的文件;信息自動同步單元,用以設定特別的數據綁定機制,讓View層的表現內容和Model層的數據根據配置信息實現自動同步;邏輯操作信息獲取單元,用以通過View層和Model層的同步機制,Controller層通過配置信息獲取當前模塊的各類邏輯操作的必要信息,從而完成公共操作的實現,并且這些Controller被擴展來實現類似邏輯;程序自動生成單元,用以根據配置信息生成目標系統(tǒng)文件,同時生成的程序文件可被組合應用在各種業(yè)務應用場景下。作為本發(fā)明的一種優(yōu)選方案,所述公共操作包括搜索、新增、修改、保存、刪除、批量刪除中的一種或多種。本發(fā)明的有益效果在于本發(fā)明提出的通過分類配置自動生成代碼的方法及系統(tǒng),通過分類記錄各用戶的需求,通過將用戶需求形成規(guī)范的配置記錄,再通過配置記錄,利用統(tǒng)一的程序生成可運行的、滿足用戶需求的信息管理系統(tǒng)和相關可擴展程序代碼,從而實現整個軟件開發(fā)流程基本無需詳細設計、程序開發(fā)和單元測試,大幅減少整個軟件開發(fā)周期的工作量和開發(fā)時間,同時也大幅提高目標系統(tǒng)的質量。
圖I為本發(fā)明通過分類配置自動生成代碼方法的流程圖。
具體實施例方式下面結合附圖詳細說明本發(fā)明的優(yōu)選實施例。實施例一本發(fā)明提供一種通過分類配置自動生成代碼的方法及系統(tǒng),幫助軟件開發(fā)人員擺脫重復勞動,將80%的典型邏輯交給工具生成的代碼處理,而將有限的時間精力集中20%真正特別的商業(yè)邏輯中。本實施例以使用J2EE技術實現B/S結構的信息管理系統(tǒng)為例介紹本發(fā)明方法。技術環(huán)境如下使用spring作為MVC框架;使用hibernate作為數據庫ORMapping工具;數據庫可以任意選擇hibernate支持的數據庫即可。請參閱圖1,本發(fā)明揭示了一種通過分類配置自動生成代碼的方法,所述方法包括如下步驟配置信息定義步驟將系統(tǒng)菜單、模塊、每個模塊的功能、每個模塊的界面內容定義分類記錄在配置信息中。該步驟通過配置信息定義單元實現。配置信息具體內容可包括I.定義目標系統(tǒng)的菜單結構2.定義目標系統(tǒng)的每個菜單對應的模塊3.定義每個模塊的可操作功能,如常見操作功能有搜索、新增、修改、保存、刪除、批量刪除、導入、導出 4.定義每個模塊的界面類型和操作風格(具體界面類型和操作風格分類見“具體實施方式
”中的說明)5.定義每個模塊的界面內容A.包含數據項分類,對應數據庫表、每個表的唯一約束定義B.每個數據項的具體屬性 輸入字段名稱 類型 長度 精度 輸入形式(普通輸入、radiobox、checkbox、下拉框、彈出選擇窗口) 默認值 是否必填 字段在不同界面中的排序順序 字段在不同界面中的排列方式 是否需要作為查詢條件 是否外鍵關聯字段;如果是外鍵關聯字段,需要標志關聯的模塊、表、字段、顯示字段信息 是否是主鍵內容分離步驟MVC三層結構包括視圖View層、模型Model層、控制器Controller層,通過將整個系統(tǒng)程序結構中MVC三層結構中的View層和Model層的內容都分離為可以和每個數據庫表相對應的文件。該步驟通過內容分離單元實現。內容分離步驟具體包括(I)將View層的涉及的每個數據庫表生成對應的如下頁面V查詢字段部分頁面文件V只讀列表部分頁面文件V彈出窗口查詢字段部分頁面文件V彈出窗口只讀列表部分頁面文件V可編輯列表部分頁面文件V可編輯表單部分頁面文件V只讀表單部分頁面文件
(2)為該模塊生成幾個總的操作頁面如下V整個模塊的列表頁面(引用前面步驟中的主表的查詢字段部分頁面文件和只讀列表部分頁面文件)V整個模塊的可編輯頁面(引用前面步驟中的主表的可編輯表單部分頁面文件和所有直接子表的可編輯列表部分頁面文件)V整個模塊的彈出窗口列表頁面(引用前面步驟中的主表的彈出窗口查詢字段部分頁面文件和彈出窗口只讀列表部分頁面文件)(3)再為該模塊的所有子表生成可編輯頁面。(引用前面步驟中的該子表的可編輯表單部分頁面文件和該子表所有直接子表的可編輯列表部分頁面文件)(4)此外還為每個頁面引用到的所有字段名稱可以生成對應的資源文件,用于多語目的切換。如果該模塊只有主表,沒有子表(即從表),則無需生成子表相關的內容。具體每個表對應的列表和表單頁面的代碼實現邏輯參見“數據綁定機制”。以下以具有兩個表的一個主從表模塊作為例子,具體包含的頁面如表I、表2所
/Jn ο
權利要求
1.一種通過分類配置自動生成代碼的方法,其特征在于,所述方法包括如下步驟 配置信息定義步驟將系統(tǒng)菜單、模塊、每個模塊的功能、每個模塊的界面內容定義分類記錄在配置信息中; 內容分離步驟MVC三層結構包括視圖View層、模型Model層、控制器Controller層,通過將整個系統(tǒng)程序結構中MVC三層結構中的View層和Model層的內容都分離為可以和每個數據庫表相對應的文件; 信息自動同步步驟設定數據綁定機制,讓View層的表現內容和Model層的數據根據配置信息實現自動同步; 邏輯操作信息獲取步驟通過View層和Model層的同步機制,Controller層通過配置信息獲取當前模塊的各類邏輯操作的必要信息,從而完成公共操作的實現,并且這些Controller被擴展來實現類似邏輯; 程序自動生成步驟讓自動生成程序根據配置信息生成目標系統(tǒng)文件,同時生成的程序文件可以被組合應用在各種業(yè)務應用場景下。
2.根據權利要求I所述的通過分類配置自動生成代碼的方法,其特征在于 內容分離步驟中,將View層和Model層的內容都分離為可以和每個數據庫表相對應的文件的流程具體包括 將View層的涉及的每個數據庫表生成對應的頁面,包括查詢字段部分頁面文件、只讀列表部分頁面文件、彈出窗口查詢字段部分頁面文件、彈出窗口只讀列表部分頁面文件、可編輯列表部分頁面文件、可編輯表單部分頁面文件、只讀表單部分頁面文件;所述數據庫表包括主表,或者還包括一級或多級子表; 為該模塊生成若干個總的操作頁面,包括整個模塊的列表頁面、整個模塊的可編輯頁面、整個模塊的彈出窗口列表頁面;整個模塊的列表頁面引用主表的查詢字段部分頁面文件和只讀列表部分頁面文件;整個模塊的可編輯頁面引用主表的可編輯表單部分頁面文件和所有直接子表的可編輯列表部分頁面文件;整個模塊的彈出窗口列表頁面引用主表的彈出窗口查詢字段部分頁面文件和彈出窗口只讀列表部分頁面文件;如果該模塊只有主表,沒有子表,則無需生成子表相關的內容; 再為該模塊的所有子表生成若干可編輯頁面,引用該子表的可編輯表單部分頁面文件和該子表所有直接子表的可編輯列表部分頁面文件; 此外還為每個頁面引用到的所有字段名稱可以生成對應的資源文件,用于多語言的切換; 將Model層的內容分離為文件的過程采用ORMapping框架實現; 數據庫外鍵統(tǒng)一分為兩種主從表關系,非主從表的代碼名稱對應關系;外鍵關系通過ORMapping框架的對象關聯來實現。
3.根據權利要求I所述的通過分類配置自動生成代碼的方法,其特征在于 所述信息自動同步步驟中設定數據綁定機制的流程包括 每個頁面對應一個當前頁面的Page對象,該對象當中可保存所有相關的頁面信息、相關數據庫對象; 在系統(tǒng)后臺邏輯執(zhí)行完畢后,系統(tǒng)可將該Page對象序列化為一個byte數組,再通過base64編碼和zip壓縮成一個字符串后放在頁面的一個隱含字段中;當頁面提交時候,后臺代碼可在請求中獲取該隱含字段的值,通過反序列化獲取該頁面提交前的Page對象,再將頁面提交的新值和變化附加到該Page對象中,從而在后臺代碼中始終能夠獲得頁面的所有相關信息,然后可以實現將當前模塊相關的數據對象始終保留在Page對象中,并且可以讓該數據對象和頁面最新內容保持同步; 將頁面提交的值附加到Page對象中的對應,通過讀取該模塊的配置來確定哪些信息需要附加,如何對應附加; 而頁面顯示時候,讓頁面每個字段顯示Page對象內的對應的對象值,可通過自定義代碼直接讀取Page對象或者統(tǒng)一將Page對象中的屬性值放置在請求request的屬性attribute中,從而可以利用已有的第三方類庫; 此外在發(fā)生異?;貪L時候,可以利用原Page對象而返回到頁面原始情況;從而實現在任意頁面轉向中保持界面元素和數據對象的自動無縫綁定。
4.根據權利要求I所述的通過分類配置自動生成代碼的方法,其特征在于 所述邏輯操作信息獲取步驟中,Controller層通過配置信息獲取當前模塊的各類邏輯操作的必要信息包括如下步驟 在所有頁面提交中包含以下變量當前頁面的路徑、頁面對象的序列化字符串、當前菜單編號、當前菜單類型、當前模塊的編號、當前主表的表名加主鍵字段名、當前主表的主鍵值、當前子表的表名加主鍵字段名、當前子表的主鍵值原、查詢條件對象的序列化字符串;根據頁面表單提交的當前模塊編號定義字段的值來從配置中獲得當前模塊對應的數據庫對象,從而在查詢操作中可動態(tài)拼接數據庫SQL語句,在保存操作中,通過當前模塊的字段定義配置,動態(tài)的將頁面表單內容附加到數據庫對象中,完成數據庫操作;數據庫事務控制可通過程序運行容器、第三方類庫或者數據庫自身提供的機制實現。
5.根據權利要求I所述的通過分類配置自動生成代碼的方法,其特征在于 所述邏輯操作信息獲取步驟中,Controller被擴展來實現類似邏輯的流程包括如下步驟 在Controller層次,使用面向切面編程AOP來實現對每個Controller的攔截來附加商業(yè)邏輯;或者通過所有Controller繼承祖先類,在祖先類中實現Controller自身邏輯實現的攔截;或者,通過組合Controller的不同數據庫對象的新增、刪除、修改、查詢的邏輯,來實現需要的擴展的業(yè)務邏輯; 在View層次,大部分擴展邏輯可在頁面邏輯擴展目錄下的頁面中增加,或者直接修改生成頁面目錄下面的頁面; 權限系統(tǒng)采用權限、角色、角色所屬權限、用戶、用戶所屬角色表結構; 系統(tǒng)菜單使用典型的頂部下拉式菜單,或者采用右側可收縮樹形菜單,或者采用圖標導航方式; 權限系統(tǒng)和系統(tǒng)菜單都屬于一次性代碼,可重復使用;權限控制通過Filter或面向切面編程AOP來實現,并且利用每個模塊的當前模塊菜單編號傳參來判斷;系統(tǒng)菜單通過將每個具體模塊放置在內置頁面容器中來實現和每個具體模塊集成使用。
6.根據權利要求I所述的通過分類配置自動生成代碼的方法,其特征在于 所述程序自動生成步驟中,自動生成程序根據配置信息生成目標系統(tǒng)文件的流程包括通過配置信息定義步驟設定的配置信息,按照如下順序,為每個模塊逐步生成下列文件 每個模塊對應的數據庫表結構; 每個模塊的數據庫對象配置; 每個模塊的數據庫對象; 每個模塊的所有操作功能對應的Controller代碼; 每個模塊的每張表對應的只讀列表內容,可編輯列表內容,搜索條件表單內容,可編輯表單內容,只讀表單內容頁面; 每個模塊的每張表的特殊邏輯附加頁面; 每個模塊的每張表的字段驗證代碼頁面; 每個模塊的列表頁面; 每個模塊的編輯頁面; 每個模塊的彈出窗口用的列表頁面。
7.根據權利要求I所述的通過分類配置自動生成代碼的方法,其特征在于 所述公共操作包括搜索、新增、修改、保存、刪除、批量刪除中的一種或多種。
8.—種通過分類配置自動生成代碼的系統(tǒng),其特征在于,所述系統(tǒng)包括 配置信息定義單元,用以將系統(tǒng)菜單、模塊、每個模塊的功能、每個模塊的界面內容定義分類記錄在配置信息中; 內容分離單元,MVC三層結構包括視圖View層、模型Model層、控制器Controller層,所述內容分離模塊通過將整個系統(tǒng)程序結構中MVC三層結構中的View層和Model層的內容都分離為可以和每個數據庫表向對應的文件; 信息自動同步單元,用以設定特別的數據綁定機制,讓View層的表現內容和Model層的數據根據配置信息實現自動同步; 邏輯操作信息獲取單元,用以通過View層和Model層的同步機制,Controller層通過配置信息獲取當前模塊的各類邏輯操作的必要信息,從而完成公共操作的實現,并且這些Controller被擴展來實現類似邏輯; 程序自動生成單元,用以根據配置信息生成目標系統(tǒng)文件,同時生成的程序文件可被組合應用在各種業(yè)務應用場景下。
9.根據權利要求8所述的通過分類配置自動生成代碼的系統(tǒng),其特征在于 所述公共操作包括搜索、新增、修改、保存、刪除、批量刪除中的一種或多種。
全文摘要
本發(fā)明揭示了一種通過分類配置自動生成代碼的方法及系統(tǒng),所述方法包括如下步驟將系統(tǒng)菜單、模塊、每個模塊的功能、每個模塊的界面內容定義分類記錄在配置信息中。通過將整個系統(tǒng)程序結構中MVC三層結構中的View層和Model層的內容都分離為可以和每個數據庫表向對應的文件。設定特別的數據綁定機制,讓View層的表現內容和Model層的數據根據配置信息實現自動同步。通過View層和Model層的同步機制,Controller層通過配置信息獲取當前模塊的各類邏輯操作的必要信息,從而完成公共操作的實現,并且這些Controller被擴展來實現類似邏輯。本發(fā)明可根據配置記錄自動生成程序代碼,大幅減少整個軟件開發(fā)周期的工作量和開發(fā)時間,同時也大幅提高目標系統(tǒng)的質量。
文檔編號G06F9/44GK102722372SQ20121016890
公開日2012年10月10日 申請日期2012年5月25日 優(yōu)先權日2012年5月25日
發(fā)明者鮑偉偉 申請人:上海學智科技有限公司