【風雲】也談程式碼生成器

iDotNetSpace發表於2008-05-20
     關於程式碼生成器 Teddy's Knowledge Base 兄在部落格園上已經談過幾次了,如他的也談orm和程式碼生成沒有ORM或程式碼生成資料就不能持久化了? - 用範型技術代替程式碼生成! 等,今天我不談程式碼生成器的意義,只談程式碼生成器的設計方案,最後給一個DEMO供大家下載.

    程式碼生成器的用途一般是根據表自動生成(Model,儲存過程,Dao,Biz,UI(html,asp,aspx,jsp,winForm. ....))等,分析其特性程式碼生成器其實就是MVC的結構,M 指的是資料庫表或其他(資料來源),C指的是程式碼生成器引擎,V指的是程式碼輸出。

         那麼程式碼生成器的方案有哪些可以選擇?

         第一:模型邏輯,控制器邏輯,檢視邏輯都在WinForm的程式碼中混著。

                     很多設計者由於專案的狀況(時間比較緊)或為了暫時的方便就把程式碼生成的邏輯直接放在程式碼生成器的引擎中,就像JAVA中有些人把所有的控制邏輯和展現邏輯都放在Servlet中一樣。這樣的程式雖然在一定程度上符合了很多開發者的需求,但是很多的專案框架和你的程式碼生成器生成出來的框架不一致,那就不行了,要麼重新修改介面修改內部的程式碼,要不再轉為指定的專案框架再設計一套程式碼生成器。優點:速度快 ; 缺點: 擴張性差.

       第二:在特定專案的資料庫中建幾個儲存過程來實現程式碼生成,優點:速度快 ; 缺點: 擴張性差.

       第三:表示層採用伺服器檢視模板引擎的MVC結構,如JSP 檢視引擎,ASP/ASPX/PHP等伺服器檢視引擎,優點:開發非常方便,可以很好的分離了檢視/控制器/模型,缺點:依賴於特定的Web伺服器,使用起來沒有CS結構的方便好用

         第四:自行開發一個檢視模板引擎,然後基於該模板引擎建造一個MVC的程式碼生成器,如商業上的CodeSmith.優點:功能強,靈活,擴充套件性好;缺點:收費的。。。。

         第五:基於開源模板引擎 Velocity,StringTemplate /NVelocity,StringTemplate.Net 建造一個MVC的程式碼生成器。

         第六:基於動態語言 IronPython,Boo ,ruby等

         第七:檢視引擎採用Velocity,StringTemplate 等開源引擎,控制器引擎採用JAVA/.NET, Shell 介面採用動態語言,利用動態語言把模板引擎和控制器引擎有機的結合起來。

         關於程式碼生成器的7種模式是我在日常工作中的總結,歡迎大家再多提提其它的設計方案。

         最後備上一個基於第五種方案的DEMO--NDO.Tools,該生成器根據資料庫表自動生成模型類,以及填補了CoR程式碼生成器缺少的一部分----根據表自動生成模型,控制器,以及對應的檢視。

         關於CoR的介紹請看,我前幾天寫的頂著Rails的浪潮,用NDO + Castle的monorail 也來秀一把

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-281038/,如需轉載,請註明出處,否則將追究法律責任。

相關文章