前陣子 , 有幸經 liusong1111 介紹 , 做了一陣子 SOHO. 收獲不小 .

項目是基于 Appfuse(struts + spring +hibernate) 開發的 . 我以前只用過 Struts,Hibernate 自己只學過一點 ,Spring 只聽過沒用過 . 所有一開始挺緊張的 . 到官方看 tutorial. 然后做了幾個例子 . 那上面的例子是采用 TDD 的流程的 . 先用 JUnit Unit Test, 然后 run, 紅燈證明 failed, 然后 coding 繼續寫或者修改真正的業務類 , 然后繼續 run, 直到變成綠燈 . 證明這個類合格了 . 然后編寫下一個 Unit Test. 一開始確實覺得有夠繁瑣 , 但是當整個步驟都結束了 . 發現集成測試的時候 , 直接啟動服務器 , 發現一切都是正確地 . 這在以前的開發中是不可能的 , 第一次寫完程序 start appserver, 總有各種各樣的問題 . 或是非常簡單的字符的一時失誤 , 或是邏輯存在漏洞 , 而采用了 TDD, 一切都那么的舒服 . 當然 , 例子是自帶的 Test Case, 我只是照抄 , 估計我自己寫的話 , 可能我寫的 Unit Test 就沒有 Example 的好了 .JavaEye 有人 ( 似乎是 Robbin) 說過 編寫單元測試證明了一個人 OOP 的水平 ”, 十分贊同 . 然后又明白了 Spring 為啥要面向接口編程了 . 為啥要有 Ioc, 為了方便 Mock . 特別是數據庫連接和 Servlet Request,Response 這種玩意 , Mock 的話 , 真的不好 Unit Test . 而如果不采用 Ioc, 那么就沒辦法在不改變程序代碼的情況下切換測試 / 運行兩種不同的狀態了 .

?

再說一下 ant , 說起 Appfuse, 真想說成也 ant, 敗也 ant, N 多多多行的 build.xml 真的可以把人看暈 . 不過為了學習來說 ,Appfuse ant 的使用 , 真是典范啊 . 但是我對 ant 沒有太大的好感 . 實在太長看起來太不爽了 . 我覺得如果團隊能統一 IDE, 那就利用 IDE 內置的 Deploy 功能就好了 . 譬如 MyEclipse 所支持的 Deploy, 簡單而好用 . 相比而言 ,Ant 雖然強大 , 卻有點讓我害怕 . 特別是每次修改了任何一點點東西想在 app server 下看一眼 , 都得 ant 出一個新的 war , 如果打包的時間短點還好 , 如果會耗費一分鐘以上的時間 , 再加上啟動 app server 的時間那真的是很惡心的一件事情 .

?

還有一些 open source 的小 toolkit, 譬如 log4j, displaytag, sitemesh 都使用了并且是正確的使用了 . 譬如 log4j, 以前的項目不是沒有 log4j, 就是用的亂七八糟的 , 打印的滿屏幕的日志 , 有跟沒有一樣 , 反而看的更心煩 .displaytag 使項目經常用到的表格這塊有個現成的輪子 , sitemesh 解決了 jsp 上的 <jsp:include src=”XXX”> 類似的代碼 , 并且可以簡化

<%

If (XXX) {

%>

<jsp:include src= “XXX”>

<%

} else {

%>

<jsp:include src=”YYY”>

<%

}

%>

?

類似這樣看起來很不爽 , 很惡心的 jsp 代碼 .

?

發現“不重復制造輪子”的感覺真好,但是偶爾輪子不太合適,如果第一次用這種輪子,那么改造的時候也可能有點麻煩。譬如一開始不太懂得 DisplayTag 的本地化。有點郁悶,弄明白了之后。稍微一改,就可以用了:)