HF Code Designer 代碼生成器


最近忙於項目和平台開發好久沒寫博客了,今天把最近的一個項目總結和大家分項一下。

在平台開發的過程中,代碼生成器是必不可少的,Net領域的代碼生成器比較多,以前用動軟的,最早的那個版本還是開源,自己寫了一個插件,總算能按照我的要求輸出代碼了。但是平台的代碼結構不斷調整,生成代碼的格式不斷變化,要不斷的修改插件,然后重新編譯再發布。比較麻煩,就想換一款代碼生成器,看了一下CodeSmith,這不錯,是基於模板的,比較靈活,研究了半天模板看着比較繁瑣,(本人對新事物的接受能力明顯不如從前,大概是老了),其實原理很簡單,關鍵是模板技術,做web前端的人對這個技術並不會陌生,前段時間做表單設計器用過整個技術,所以何不自己開發一個代碼生成器?基於前面的積累,做一個這樣的代碼生成器也就2天的時間。

有這個想法不是一兩天了,考慮成熟后就動手了,在原來的應用框架上,經過2天的時間初版基本完成,測試后拿到新項目中使用了。下面是代碼生成器的截圖。跟動軟的界面比較像,但是實現原理完全不一樣。

clip_image002

下面分享一下實現過程。

代碼生成器需要解決一下幾個問題:

1、 讀取數據庫結構,包括數據庫、表、視圖和字段。

2、 制定代碼模板,按照自己業務代碼的要求編寫代碼模板。可以編寫多個模板,例如使用Datatable和Entity的可以定義不同的模板,代碼生成的時候選擇不同的模板即可。

3、 代碼的預覽,根據模板生成代碼后需要預覽一下,為了直觀的顯示代碼,希望有visual studio ide那樣的代碼編輯器,但是不知道怎么集成這個編輯器,有知道的朋友可以告訴我。沒辦法,從SharpDevelop開源項目上扒了編輯器,各種無奈,該項目新版的編輯器是wpf,所以目前只能用它低版本的編輯器,不過基本夠用了。上圖的效果可以看到,比較直觀。

4、 代碼生成類文件,可以把上面生成的代碼復制到類庫文件中。也可以批量生成類庫文件。

下面具體介紹每一步實現過程。

1、 讀取數據庫結構

獲取數據庫結構包括:獲取數據庫名,表視圖名,字段屬性。獲取數據庫的方法很多,一般是讀取系統表, 返回數據庫的sql如下SELECT Name FROM Master..SysDatabases ORDER BY Name, 能返回當前數據庫實例的所有數據庫,這樣不好,把一些不需要的數據庫也讀取出來了,我采用的方式讀取配置文件。只要在配置文件中定義的數據庫連接字符串都讀出來。配置文件中的數據庫連接字符串如下圖:

clip_image004

表示配置了3個數據庫連接,把這三個連接作為可訪問的數據庫。從配置文件讀取數據庫連接字符串,使用ConfigurationManager類的方法,代碼如下圖:

clip_image006

讀取的數據庫加載到樹節點上。加載后的效果如下圖:

clip_image008

選中數據庫后,加載數據庫中的表和視圖,也是利用系統表sysobjects,讀取數據庫中所有表的sql語句:SELECT * FROM sysobjects where xtype='U' order by name , 讀取數據庫中所有試圖的sql語句:SELECT * FROM sysobjects where xtype='V' order by name,讀取之前要制定連接的數據庫。

讀取了數據庫和表以后,讀取表中的字段,這個比較麻煩,需要了解字段在系統表中的存放,讀取字段的方法如下圖:

clip_image010

作了一個關聯查詢,查詢處的結果如下圖:

clip_image012

信息每個字段的意思一看就明白了。

2 制定代碼模板

做過cms的都知道什么是模板技術,就是在文件里定義標簽,運行的時候用內容替換標簽,這個過程很簡單,但是要做到強大的替換功能,需要引入模板引擎的概念,說句題外話,asp.net的頁面處理機制全部采用這種技術。我使用的模板引擎是第三方的輕量級的著名的模板引擎NVelocity。下面是我定義的代碼模板:

clip_image014

它是一個txt文件,里面除了模板引擎的關鍵字和引擎符號,其余的文字可以隨便寫。生成的代碼如下:

clip_image016

使用模板引擎需要注意的是,模板中的$變量必須是數據實體的形式提供,不能是其他類型,也就是可序列化的類型才行,否則模板引擎不認識。

3 代碼預覽,這個前面已經講過了,使用的是一個開源的控件。模板生成和代碼預覽的核心代碼如下圖:

clip_image018

模板技術就是這么強大,掌握了整個技術,可以做出基於模板的web頁面,不要擔心模板的生成速度,模板引擎是相當快的,幾乎感覺不到有什么延遲。基於瀏覽器的頁面呈現和報表控件都是基於這種技術。

4 生成類文件

這個過程再簡單不過了,代碼都已經生成了,復制到類文件中即可,可以把整個項目的類文件批量生成出來。不過這要求前面的設計必須很成熟了。否則一旦生成的代碼要修改,就要重新生成了。

總算結束了,這只是初版后面會繼續完善。最近項目工期緊,有時間的時候再來分享一款查詢引擎。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM