前陣子 , 有幸經(jīng) liusong1111 介紹 , 做了一陣子 SOHO. 收獲不小 .
項(xiàng)目是基于 Appfuse(struts + spring +hibernate) 開發(fā)的 . 我以前只用過 Struts,Hibernate 自己只學(xué)過一點(diǎn) ,Spring 只聽過沒用過 . 所有一開始挺緊張的 . 到官方看 tutorial. 然后做了幾個(gè)例子 . 那上面的例子是采用 TDD 的流程的 . 先用 JUnit 寫 Unit Test, 然后 run, 紅燈證明 failed, 然后 coding 繼續(xù)寫或者修改真正的業(yè)務(wù)類 , 然后繼續(xù) run, 直到變成綠燈 . 證明這個(gè)類合格了 . 然后編寫下一個(gè) Unit Test. 一開始確實(shí)覺得有夠繁瑣 , 但是當(dāng)整個(gè)步驟都結(jié)束了 . 發(fā)現(xiàn)集成測試的時(shí)候 , 直接啟動(dòng)服務(wù)器 , 發(fā)現(xiàn)一切都是正確地 . 這在以前的開發(fā)中是不可能的 , 第一次寫完程序 start appserver, 總有各種各樣的問題 . 或是非常簡單的字符的一時(shí)失誤 , 或是邏輯存在漏洞 , 而采用了 TDD, 一切都那么的舒服 . 當(dāng)然 , 例子是自帶的 Test Case, 我只是照抄 , 估計(jì)我自己寫的話 , 可能我寫的 Unit Test 就沒有 Example 的好了 .JavaEye 有人 ( 似乎是 Robbin) 說過 ” 編寫單元測試證明了一個(gè)人 OOP 的水平 ”, 十分贊同 . 然后又明白了 Spring 為啥要面向接口編程了 . 為啥要有 Ioc, 為了方便 Mock 啊 . 特別是數(shù)據(jù)庫連接和 Servlet 的 Request,Response 這種玩意 , 不 Mock 的話 , 真的不好 Unit Test 了 . 而如果不采用 Ioc, 那么就沒辦法在不改變程序代碼的情況下切換測試 / 運(yùn)行兩種不同的狀態(tài)了 .
再說一下 ant 吧 , 說起 Appfuse, 真想說成也 ant, 敗也 ant, 那 N 多多多行的 build.xml 真的可以把人看暈 . 不過為了學(xué)習(xí)來說 ,Appfuse 對 ant 的使用 , 真是典范啊 . 但是我對 ant 沒有太大的好感 . 實(shí)在太長看起來太不爽了 . 我覺得如果團(tuán)隊(duì)能統(tǒng)一 IDE, 那就利用 IDE 內(nèi)置的 Deploy 功能就好了 . 譬如 MyEclipse 所支持的 Deploy, 簡單而好用 . 相比而言 ,Ant 雖然強(qiáng)大 , 卻有點(diǎn)讓我害怕 . 特別是每次修改了任何一點(diǎn)點(diǎn)東西想在 app server 下看一眼 , 都得 ant 出一個(gè)新的 war 包 , 如果打包的時(shí)間短點(diǎn)還好 , 如果會耗費(fèi)一分鐘以上的時(shí)間 , 再加上啟動(dòng) app server 的時(shí)間那真的是很惡心的一件事情 .
還有一些 open source 的小 toolkit, 譬如 log4j, displaytag, sitemesh 都使用了并且是正確的使用了 . 譬如 log4j, 以前的項(xiàng)目不是沒有 log4j, 就是用的亂七八糟的 , 打印的滿屏幕的日志 , 有跟沒有一樣 , 反而看的更心煩 .displaytag 使項(xiàng)目經(jīng)常用到的表格這塊有個(gè)現(xiàn)成的輪子 , 而 sitemesh 解決了 jsp 上的 <jsp:include src=”XXX”> 類似的代碼 , 并且可以簡化
<%
If (XXX) {
%>
<jsp:include src= “XXX”>
<%
} else {
%>
<jsp:include src=”YYY”>
<%
}
%>
類似這樣看起來很不爽 , 很惡心的 jsp 代碼 .
發(fā)現(xiàn)“不重復(fù)制造輪子”的感覺真好,但是偶爾輪子不太合適,如果第一次用這種輪子,那么改造的時(shí)候也可能有點(diǎn)麻煩。譬如一開始不太懂得 DisplayTag 的本地化。有點(diǎn)郁悶,弄明白了之后。稍微一改,就可以用了:)