代码生成器的存在价值 选择自 mechiland 的 Blog
多年前用ASP的時候,就聽說了有一種叫做代碼生成器的神奇的東西。只需要指定數據庫鏈接,這個代碼生成器就能夠產生一個界面,然后選擇你需要進行生成的數據表,按一下按鈕,馬上基于這個表的增刪改查界面以及對應的ASP程序代碼就生成出來,著實方便。當時的我對ASP已經輕車熟路,看了一眼這個工具后,心中評估了一下,然后使用了一把……看到這個工具生成的ASP程序源代碼,讓人確實有點接受不了——大小寫不區分,大段大段的冗余代碼。雖然生成的代碼確實能夠完成特定的業務操作,但是維護性確實太差了。據說后來有一些優質的代碼生成器能夠生成更好的程序,但是確實是從那個時候開始,代碼生成器在我心里成了垃圾代碼堆砌的代名詞。我情愿自己編寫一行一行代碼也不愿意用代碼生成器。
現在,當專注于某一個行業,某一種特定業務時,你會發現重復性是如此之大。——用戶管理在大多數地方都是類似的,只是用戶相對的字段有些不一樣;用戶登錄界面、登出界面可能也是一樣的,只是把某些圖片換一下而已;大部分的業務操作都是增刪改查,對于這種操作不斷的采用同一種方式進行重復、還得小心出錯;權限管理界面看起來也沒什么大的不同……也許我們早就煩了。框架在某種程度上保證了項目的質量,但并不能減少編碼量;某些框架甚至需要更多的編碼(以及學習時間)。例如,與Servlet+JSP方式相比,Struts除了JSP, 還需要編寫特定的Form, Action,并在struts-config.xml中加上幾行;Tapestry則需要編寫.page, .html, 對應的Page類,如果需要驗證還得編寫Delegate類;至于FreeMaker,Velocity之類界面工作量可能小了一些,但還得需要編寫自己的簡單框架用以實現MVC模式。Spring集成了這些表示層,看起來比較好……
上述解決方案的根本問題在于,框架只是保證了項目的質量、可維護性,但是沒有減少編碼量。因此,代碼生成器的使用便是理所當然的了。這方面已經有先例了,最有效、最能夠顯示代碼生成的威力的,當屬xdoclet的ejb任務。我們知道,創建一個EJB需要同時創建其他四個無聊的接口,xdoclet在這方面將代碼生成的威力發揮到了極致。另外,middlegen也能夠創建基于數據庫,使用Hibernate, Struts, EJB技術的Web應用程序,他能夠生成JSP, Hibernate映射文件,Java類,EJB類等。middlegen應該是我見到的最完整的應用程序生成器的雛形,但是他還不足以具體,不足以縮短編碼時間。
我思考了幾天,在做OpenBUGZ和公司項目的過程中,想出了這種模型:
基礎架構:Spring, Hibernate, Tapestry
Spring,Hibernate的好處自不待言,前臺沒有采用Struts或者WebWork,是因為前兩者在界面表示上不夠靈活,Struts需要配合Tiles才能實現靈活的布局,WebWork不太熟悉,不知道如何實現靈活的布局。然而在Tapestry中布局的問題幾乎不是問題。
應用技術:Ant, Xdoclet, FreeMaker, JUnit
用FreeMaker而不用Velocity是因為前者有更多的支持,而且從我的使用感覺來說,FreeMaker相對較強大。
開發步驟:
1 首先開發者(項目經理或者技術經理)根據需求對整個系統建模,完成基本類圖,生成所有的業務模型類;
2 根據業務模型類編寫Hibernate映射文件(用xdoclet可能不太方便,特別是業務模型類存在繼承關系時);
3 (代碼生成)生成對應的DAO接口例如XXXDAO,用來對XXX對象進行增刪改查 (如果采用Spring Hibernate Template,這一步可以省略)
4 (代碼生成)生成采用Hibernate的DAO實現
5 (代碼生成)生成業務邏輯層代碼XXXManager,用來調用DAO層實現各種業務邏輯操作;
6 (代碼生成)生成XXXManager對應的單元測試
7 (代碼生成)生成業務模型類的增刪改查界面Html(通過模板)
8 (代碼生成)生成界面對應的Tapestry所需要的.page文件
9 (代碼生成)如果需要驗證,還需要生成需要的Delegate類
10 (代碼生成)生成對應的增刪改查Page類
11 (代碼配置)在Spring的配置文件中配置DAO的事務
12 (代碼配置)在Spring的配置文件中配置XXXManager
13 配置數據庫鏈接,利用Hibernate的SchemaExport直接生成數據庫
14 生成整個項目的文件結構,包括build.xml,如果需要,也可以生成JBuilder或者Eclipse項目
15 開發:對 XXXManager進行更改,對界面進行修飾。
從上面可以看到,整個項目工作量已經很低了;-) 這樣對業務分析人員的要求比較高,要求一次能夠分析全面徹底。項目中最后的工作只剩下修改業務邏輯,修改修改頁面了。這就是代碼生成器的威力。
作者Blog:http://blog.csdn.net/mechiland/
轉載于:https://www.cnblogs.com/sunsonbaby/archive/2004/12/09/75054.html
總結
以上是生活随笔為你收集整理的代码生成器的存在价值 选择自 mechiland 的 Blog的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Junit Test使用样例
- 下一篇: chrome 开启 JSONview