作者:陳市明/Slipper Feng 摘自:http://www.tkk7.com/JPeanut
J2EE 是目前公認(rèn)的比較慢的一種開發(fā),相比 .net , php , asp 等而言。其實, j2ee 的開發(fā)者都深有體會的, java 代碼編寫的速度其實并不慢,在 eclipse 和 jbuilder 等可視化界面的幫助下,編寫代碼變的越來越簡單;但是在調(diào)試的時候,每改完一個 java 或者 xml 代碼要預(yù)覽改的效果的話,必須要重新構(gòu)建,部署,重啟服務(wù)器 , 這些動作反反復(fù)復(fù),消耗的時間不少。
近期為公司寫了個單元測試的框架,基本上解決了反反復(fù)復(fù)構(gòu)建,部署,重啟服務(wù)器的問題。我們的項目的都是運用了類似 struts - spring - hibernate 的 MVC 架構(gòu)(下面簡稱 ssh ),不同的就是中間的 aop 是自己開發(fā)實現(xiàn)的,而沒有運用 spring 的。不過,我們的單元測試框架對標(biāo)準(zhǔn)的 struts - spring - hibernate 支持也挺好。
上面的是在 ssh 的一次交互的原理圖,做過 struts 開發(fā)者都會很熟悉。首先,是 jsp 通過 submit 的 url 將表單數(shù)據(jù)提交給后臺 action 的 servlet ,后臺通過在 struts-config.xml 中的配置找到相關(guān)的××× Action ,然后通過××× Service ,××× Dao 操作數(shù)據(jù)庫,再將數(shù)據(jù)返回給另外一個 jsp ,讓他顯示結(jié)果。
上面的圖是我們單元測試框架實現(xiàn)構(gòu)建,部署,重啟服務(wù)器的原理圖。我們很容易從圖上看的出來,我們寫了個 Test ××× Action 來模擬 2 個 jsp 的動作,該類分成 2 部分上面一部分是模擬了 jsp 頁面 submit 的動作(包括模擬提交給 url ,模擬提交數(shù)據(jù)),下面一部分是接收××× Action 返回的數(shù)據(jù),然后,進(jìn)行校驗(此處的校驗,我們用了 junit 的斷言功能)。通過用 java 類來模擬 jsp 的好處在于,我們可以完全把這個一個交互作為一個 application 來運行起來,非常容易的做到單步調(diào)試,而不用到真實的平臺上,啟動服務(wù)器上運行。(注:此處有 2 個 db :開發(fā) db 和測試 db ,這個再以后的介紹中會講到)
我們還為在這個架構(gòu)上開發(fā)制定了流程:
1 把當(dāng)天需要開發(fā)的模塊的 java 代碼全部些好
2 通過這種模式調(diào)試 java 代碼
3 在確保這些 java 代碼無誤后,構(gòu)建,部署,啟動服務(wù)器
4 然后編寫所有的 jsp (因為修改 jsp 無需啟動服務(wù)器)
這樣,在開發(fā)一天的所有代碼,幾乎都不用怎么重啟服務(wù)器,可以為開發(fā)人員省下很多時間,也使得開發(fā)人員喜歡的單步調(diào)試變的異常簡單,提高代碼的質(zhì)量。
我們已經(jīng)在真實的項目中實施了該流程的開發(fā),得到的效果和預(yù)期的一樣。當(dāng)然還是比不過其他語言的開發(fā),不過我們的架構(gòu)還在不斷改進(jìn)(通過改進(jìn)流程、編寫 eclipse 等開發(fā)工具的插件等方法),使我們的開發(fā)人員可以更加快的進(jìn)行 j2ee 的開發(fā)。