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