2006年10月21日

Wicket + Hibernate for now.

這陣子由於 project 本身壓力的推動,狠狠的從四年前拋下 Java 處重新開始。總結這陣子做的事情,大部分都落在 Java EE 的範圍。其實說是說 Java EE,其中那一票大傢伙也不見得都全部要精通,要用到的時候再去看看就成了。

Sun 提供的各類 Java 相關 spec 有個根本的問題,他是由聰明的軟工學者經過充分思考去訂出來的。為了符合軟體各式各樣的發展需要,所以非常的抽象,其中間雜許多層的 layer。問題是,當你要把一個規格弄到「各處都合用」時,往往也代表「太複雜了根本沒人用」。由 OSI 七層網路架構到現在的 TCP/IP 或許就是個好例子吧。

目前 MIS 相關案子,考慮到實用性以及利用網路等等因素,多半都開發成 web based 系統。一開始我採用的路子是 struts + Hibernate,這算是當前主流技術,不過 struts 這個 framework 由於是 request based,跟 oo based 的 java 其實結構上是不一樣的東西,所以他需要一些額外的東西去銜接兩者,亦即 tag 跟 xml 設定檔。

tag 其實只不過是把直接的 java code 包一層,取個代號放到 jsp 裡頭以免嚇到做 html 的美工而已,骨子裡還是把 java code 扔到了網頁裡頭,我覺得由以前 asp, php, jsp 等等的例子,已經證明了這是個簡單易理解的方式,壞處是很容易就很亂,而且把本來是呈現用的 html 變成了程式,可能還會 parse 到一半才掛掉之類的,寫小東西還可以,做大 project 時,實在是不怎麼樣的做法。

至於 struts 的 struts-config.xml 其實我沒啥意見。反正既然是 request based,當然需要個設定檔來指定哪個步驟對應到哪些程式碼。就實作的角度來看,這其實提供了相對比較底層的控制,每個網頁到網頁之間的動作都可以定義,有他的好處在。

追根究底,struts 的主要問題還是在於他跟 java 的差異太大了。這也是我們採用 struts 搞定幾個案子後,我開始打算找另一個 framework 的原因。目前我選定的目標是 wicket,他跟 JSF 類似,都是 component based,就是把網頁裡頭的東西當成一個個的 java 元件去開發出來,這比較符合 java 的結構,感覺也比較直觀。JSF 是正式的規格,同樣的也是很難學,東西很多,好處是他有 Sun 背書,很可能會被當成業界標準,而且也不只適用在 web 上。不過嘛,我個人是覺得,很有可能以後是大家去配合 web,也就是各種 device 上都有 web browser,而不是大家一人訂一套規則這麼麻煩,所以照例,很可能 JSF 想那麼多結果最後還是釘在 web 上,還不如 wicket 一開始就是瞄準 web 簡單多了。

選定 wicket 以後,接下來是跟 database 整合的問題。Hibernate 現在其實是標準選擇啦,也沒其他人做得更好。我一向的目標都是快速開發,其實軟體架構的問題,碰到了再去解決就好,倒不需要一開始就想太多,學問是拿來用的,而不是什麼都照著學到的東西全部弄進去,這時候 hacker 型的人可能早就做完了,系統也沒啥問題。我想某些人應該不見得贊成這種作法吧,不過 open source 的 C 程式碼看多了,的確會發現軟體工程的層面想太多不見得有用,直接下去做出來就是啦。

現在選定的另一目標是 Databinder,這套東西很有意思,他從 wicket 的 component 出發,把他跟 hibernate 連結起來,做出來的東西很類似 Microsoft 系統最愛用的那些直接可以跟 database 溝通的 component。由於整個 OO 的結構做得蠻完整的,我估計應該有足夠的彈性,從稍細的要求到最簡單的直接整包拿來用應該都可處理(希望啦),如果沒弄錯,這套東西整個搞定以後,要弄出一套 web application 應該是很快的。

下一步要看的是 spring。這玩意可拿來當 hibernate 跟 wicket 的中間層,就目前來看,如果不用 AOP (aspect-oriented programming) 的話,這套倒是不見得非要用不可。照往例,需求在有需要的時候自然會顯現,如果寫一寫發現哪裡不順,非要用到不可的話,再拿來用就是囉。

幾個小註記:mock object 是拿來製造一個假的環境,例如 data source 等等來符合測試的需要。關於這個我也還持保留態度,因為做假的環境究竟要做在 java 「之內」還是「之外」比較好,我覺得都還可以考慮。就我來看,我比較喜歡在 java 外頭架一個假的環境給他測試。java 再怎麼說,也只是個「程式語言」,搭配一大堆的「程式庫」,就是 sun 出的 library 加上那一狗票 framework,包山包海的結果反而增加複雜性,java 社群就是老是搞這種事,才會把 java 弄得那麼難學。

沒有留言 :

張貼留言