1)代碼生成工具介紹
Database2Sharp是一款代碼生成工具和數據庫文檔生成工具,該工具從2005年開始至今,一直伴隨着我們的客戶和粉絲們經歷着過各種各樣的項目開發,在實際開發中能帶來效率的提高及編程的快樂。
Database2Sharp是一款主要用於C#代碼生成以及數據庫文檔生成的工具,軟件支持Oracle、SqlServer、MySql、PostgreSQL、Sqlite、Access以及國產達夢等數據庫的代碼生成,可以生成各種架構代碼、生成Winform界面代碼、Web界面代碼(包括EasyUI和BootstrapWeb界面)、Entity Framework實體框架代碼、導出數據庫文檔、瀏覽數據庫架構、查詢數據、生成Sql腳本等,還整合自定義模板和數據庫信息的引擎,方便編寫自定義模板調試和開發。生成的框架代碼支持多種數據庫一起使用,也支持不同業務的數據庫切割為多個庫進行使用,是一種適應性非常強、彈性很好的應用框架。
Database2Sharp推薦采用軟件功能“Enterprise Library代碼生成”來生成項目代碼,這個架構體系生成整個項目工程框架,包含實體類、數據訪問類、業務類、Web頁面代碼、WCF相關服務層(可選)、Web API服務層(可選),以及各種服務的調用包裝層代碼等。該架構利用泛型及緩存機制,良好的架構極大簡化代碼,強大完善的基類機制使您甚至不用編寫一行代碼就能順利運行。一個簡單點擊幾次鼠標就能完成一周代碼量的代碼生成工具,效率驚人、友好體貼,真正的開發好伴侶。
當然,開發的過程是一個繁復、精細的過程,因此Database2Sharp也吸收了來自我們自己的實際需求,以及很多同仁朋友的寶貴意見,一直在改進,一直努力做到更好,以求達到一個更加完美、更加易用的境界。
在我們開發軟件的時候,解決方案項目基於一定的分層組織,每個項目分層中,各個類的關系也是確定的,借助輔助工具(結合模板引擎)可以快速生成我們所需要的代碼,並極大提高我們軟件的開發效率,Database2Sharp代碼生成工具就是一款專門針對我們自己框架結構配套的開發工具。
Database2Sharp代碼生成工具,主要是基於數據庫提取的元數據信息,根據表的信息和關系,字段信息等內容,生成我們框架所需要分層的類代碼。
對於Winform開發,可以根據Winform框架或者混合框架的窗體界面類,生成標准的界面代碼,列表界面默認具有分頁查詢、導入導出、高級查詢、編輯、刪除事件綁定,編輯界面則具有獲取數據並顯示在控件,保存后執行更新或者寫入的操作。
對於Web開發,可以根據EasyUI控件界面或者Bootstrap控件界面的不同,生成對應的視圖HTML代碼和控制器類代碼,同時這些界面默認也具有分頁查詢,導入導出,顯示明細和保存數據的功能。
2)軟件功能界面及項目結構
軟件主要界面如下所示。
軟件功能界面如上圖所示,左側為數據庫信息展示,右側為表信息或者代碼信息展示,主要功能通過左側樹上的右鍵或者界面按鈕實現。
代碼生成工具的項目結構如下所示。
其中各個項目負責的內容不同,分為數據核心模塊、配置文件模塊、Winform項目模塊、Web項目模塊、混合框架項目模塊、數據庫腳本項目模塊、EF實體框架項目模塊、數據庫文檔模塊,如下圖所示。
根據實際生成代碼的需要,我們可以進一步擴展應用模塊,利用底層數據庫元數據和模板引擎,從而生成更多的項目模板代碼。
3)元數據對象及層級關系
其中WHC.CodeGenerator.Core項目是元素獲取處理的核心模塊,它主要負責從不同數據庫類型的數據庫中獲取相關庫的表信息、字段信息、存儲過程和視圖信息等內容。
其中各個對象的層級關系如下所示:每個數據庫實例,包含多個數據庫信息,一個數據庫對象包括多個表、多個視圖、多個存儲過程對象,一個表則包含多個字段對象,而每個字段可能包含一個到多個Key對象信息,如外鍵、主鍵信息等。
代碼生成工具支持幾種不同的數據庫元素獲取,數據庫元素的獲取通過實現IListData接口,從而支持多種數據庫類型,包括MS SQLServer、Oracle、Mysql、PostgreSQL、SQLite、Access等數據庫,他們從Database基類擴展,形成自己數據庫特點的子類,如SQLServer、Mysql類,數據庫的操作也是基於Enterprise Library數據庫訪問模塊實現的。繼承關系如下所示。
4)工具界面向導功能介紹
代碼生成工具里面,我們生成代碼的時候,一般需要選擇哪個庫,然后選擇表,以及一些配置項,才能進行代碼的生成,這個是一個配置向導的功能,主要是基於Microsoft.ApplicationBlocks.UIProcess 組件進行的一個動態配置(UIProcess是微軟早期的一個界面管理組件),它是讀取配置文件進行的界面處理。如下面是App.config配置文件的內容。
其中每個View代表一個配置一個向導界面,如SelectDatabaseView,它對應一個控制器SimpleController。
另外,配置文件的navigationGraph是一個配置型的導向,主要配置我們處理的場景,詳細配置如下所示。
和這些導航圖的配置信息對應,我們代碼生成工具也需要提供對應名稱的窗體,如下圖所示。這些窗體就是我們操作某個代碼生成過程的操作界面,如選擇數據庫界面,選擇表界面,確認生成功能界面等。
另外配置文件里面會定義我們一組處理的導航窗體,用來構建我們一個業務場景,如EnterpriseLibrary架構代碼生成操作。
然后我們在界面需要定義一個按鈕,實現這個代碼生成功能的時候,只需要調用這組視圖的名稱即可,如下代碼所示。
這樣啟動后,整個處理導航邏輯就會按照配置文件的順序一個個調用界面,最后統一生成代碼即可。
5)自定義模板代碼生成
代碼生成工具是基於比較有名的NVelocity模板進行代碼文件生成的,因此熟悉NVelocity語法可以修改模板,以適應需要,生成不同內容的文件。
除了可以利用NVelocity模板語法,實現變量定義或者賦值、控制邏輯處理等功能外,還可以利用模板和后台變量進行交互處理。
模板引擎的后台控制規則是在代碼生成工具里面封裝的,因此可以在NVelocity模板文件里面訪問對應的數據庫對象,選擇的表對象、字段信息等元素內容,或者訪問自定義的變量。
基於模板方式的代碼生成方式,可以提高生成效率,並且減少維護成本(相對某些硬編碼代碼生成的方式更優),方便用戶對模板進行適當的修改等特點。
關於NVelocity模板語法,詳細介紹可以參考伍華聰博客《強大的模板引擎開源軟件NVelocity》隨筆。
在實際開發當中,自定義模板生成是很多代碼生成工具生成代碼的重要補充,例如有些項目代碼片段需要(例如控件賦值語句,或者控件數據顯示語句等),如果能通過自定義模板方式,利用模板引擎的靈活特點,以及已有數據庫的結構信息,就很方便生成重復性強、有一定規律的代碼。
用【選表進行代碼生成】方式,可以很好利用后台的數據庫表、字段等信息,結合模板生成高效的代碼。
另外,為了方便大家對模板引擎NVelocity的了解,在軟件工具安裝的時候,附帶了幾個常見的例子,如下所示。
例子的代碼大致如下所示,主要是讓大家快速了解Nvelocity的模板語言VTL的使用。如果對模板引擎更加深入的了解,可以查看我之前的隨筆《強大的模板引擎開源軟件NVelocity》進一步了解。