最近忙于修訂《Javaserver Faces in Action》,都沒有時間來修改這個文檔了。我發現校對文稿真的是一個非常辛苦的事情,比起寫來,要麻煩得多。何況我又不是一個細致的人。真是有些痛苦。今天抽點時間來繼續將這部分發點出來。
很多人都問,Struts中用什么處理模型和數據。
我以前總說,這和Struts有什么關系?
從實際上來說,這的確和他沒什么關系,因為他是M中立的。你可以使用你自己喜歡的任何M實現。但是正因如此,其實也還是和她有關系的,那就是它本質上的MVC的分層設計。
對Struts本身來說,作為最成功的一個MVC框架,實際上其最成功之處和精彩之處就是其中的C,即它是一個比較好的Front
Controller 模式的實現。 很多地方,特別是其它利用了它的大型框架,都利用了他的這個優點。比如Oracle 的ADF。
但是對小型應用來說,很多人在爭論,Action到底是M還是C。其實這并不重要,如果應用小型,你盡管可以在其中實現你的Biz Logic。這樣的話,它就是M。否則,稍大型一些的應用,最好還是作為一個C來使用,至少是C的一個helper。
那么,具體的M怎么辦呢?常規的做法是委托給POJO或者EJB。但是基于分層的目的,這中間通常是需要一個緩沖,那就是Facade。SUN的
官方Facade實現原來推薦的是Session
EJB,這感情好,如果你能搞定它,業務和實體也可以盡管使用EJB。如果你不能負擔EJB之痛,你可以使用POJO
Facade來訪問你的POJO實現的邏輯。
那么你的POJO生長在哪里?目前的Spring 等IoC容器正是一個好地方。實際上我想將Spring 成為是“框架之框架”。
OK,那么數據層又如何?嘿嘿,實際上離Struts太遠啦,嚴格說起來他不想知道,也不用知道。你可以使用任何需要的持久實現,關鍵是作為DTO傳遞給C和V的結果,以及它們之間的轉換。
本書中的ProcessBean是早期的一個POJO Facade,非常不錯。但是不知為和這個包一直在Apache Commons的沙坑中跳不出來。而且如今有些陳舊了。
不過,本章其中的RSS和Lucene的講述倒是不錯。值得參考。
這里下載。