前阵子 , 有幸经 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 的本地化。有点郁闷,弄明白了之后。稍微一改,就可以用了:)