最近忙於項目和平臺開發很久沒寫博客了,今天把最近的一個項目總結和你們分項一下。前端
在平臺開發的過程當中,代碼生成器是必不可少的,Net領域的代碼生成器比較多,之前用動軟的,最先的那個版本仍是開源,本身寫了一個插件,總算能按照個人要求輸出代碼了。可是平臺的代碼結構不斷調整,生成代碼的格式不斷變化,要不斷的修改插件,而後從新編譯再發布。比較麻煩,就想換一款代碼生成器,看了一下CodeSmith,這不錯,是基於模板的,比較靈活,研究了半天模板看着比較繁瑣,(本人對新事物的接受能力明顯不如從前,大概是老了),其實原理很簡單,關鍵是模板技術,作web前端的人對這個技術並不會陌生,前段時間作表單設計器用過整個技術,因此何不本身開發一個代碼生成器?基於前面的積累,作一個這樣的代碼生成器也就2天的時間。web
有這個想法不是一兩天了,考慮成熟後就動手了,在原來的應用框架上,通過2天的時間第一版基本完成,測試後拿到新項目中使用了。下面是代碼生成器的截圖。跟動軟的界面比較像,可是實現原理徹底不同。sql
下面分享一下實現過程。數據庫
代碼生成器須要解決一下幾個問題:瀏覽器
一、 讀取數據庫結構,包括數據庫、表、視圖和字段。框架
二、 制定代碼模板,按照本身業務代碼的要求編寫代碼模板。能夠編寫多個模板,例如使用Datatable和Entity的能夠定義不一樣的模板,代碼生成的時候選擇不一樣的模板便可。asp.net
三、 代碼的預覽,根據模板生成代碼後須要預覽一下,爲了直觀的顯示代碼,但願有visual studio ide那樣的代碼編輯器,可是不知道怎麼集成這個編輯器,有知道的朋友能夠告訴我。沒辦法,從SharpDevelop開源項目上扒了編輯器,各類無奈,該項目新版的編輯器是wpf,因此目前只能用它低版本的編輯器,不過基本夠用了。上圖的效果能夠看到,比較直觀。編輯器
四、 代碼生成類文件,能夠把上面生成的代碼複製到類庫文件中。也能夠批量生成類庫文件。ide
下面具體介紹每一步實現過程。測試
一、 讀取數據庫結構
獲取數據庫結構包括:獲取數據庫名,表視圖名,字段屬性。獲取數據庫的方法不少,通常是讀取系統表, 返回數據庫的sql以下SELECT Name FROM Master..SysDatabases ORDER BY Name, 能返回當前數據庫實例的全部數據庫,這樣很差,把一些不須要的數據庫也讀取出來了,我採用的方式讀取配置文件。只要在配置文件中定義的數據庫鏈接字符串都讀出來。配置文件中的數據庫鏈接字符串以下圖:
表示配置了3個數據庫鏈接,把這三個鏈接做爲可訪問的數據庫。從配置文件讀取數據庫鏈接字符串,使用ConfigurationManager類的方法,代碼以下圖:
讀取的數據庫加載到樹節點上。加載後的效果以下圖:
選中數據庫後,加載數據庫中的表和視圖,也是利用系統表sysobjects,讀取數據庫中全部表的sql語句:SELECT * FROM sysobjects where xtype='U' order by name , 讀取數據庫中全部試圖的sql語句:SELECT * FROM sysobjects where xtype='V' order by name,讀取以前要制定鏈接的數據庫。
讀取了數據庫和表之後,讀取表中的字段,這個比較麻煩,須要瞭解字段在系統表中的存放,讀取字段的方法以下圖:
做了一個關聯查詢,查詢處的結果以下圖:
信息每一個字段的意思一看就明白了。
2 制定代碼模板
作過cms的都知道什麼是模板技術,就是在文件裏定義標籤,運行的時候用內容替換標籤,這個過程很簡單,可是要作到強大的替換功能,須要引入模板引擎的概念,說句題外話,asp.net的頁面處理機制所有采用這種技術。我使用的模板引擎是第三方的輕量級的著名的模板引擎NVelocity。下面是我定義的代碼模板:
它是一個txt文件,裏面除了模板引擎的關鍵字和引擎符號,其他的文字能夠隨便寫。生成的代碼以下:
使用模板引擎須要注意的是,模板中的$變量必須是數據實體的形式提供,不能是其餘類型,也就是可序列化的類型才行,不然模板引擎不認識。
3 代碼預覽,這個前面已經講過了,使用的是一個開源的控件。模板生成和代碼預覽的核心代碼以下圖:
模板技術就是這麼強大,掌握了整個技術,能夠作出基於模板的web頁面,不要擔憂模板的生成速度,模板引擎是至關快的,幾乎感受不到有什麼延遲。基於瀏覽器的頁面呈現和報表控件都是基於這種技術。
4 生成類文件
這個過程再簡單不過了,代碼都已經生成了,複製到類文件中便可,能夠把整個項目的類文件批量生成出來。不過這要求前面的設計必須很成熟了。不然一旦生成的代碼要修改,就要從新生成了。
總算結束了,這只是第一版後面會繼續完善。最近項目工期緊,有時間的時候再來分享一款查詢引擎。