進(jìn)入項(xiàng)目就一直忙忙碌碌,朦朧中已經(jīng)有近一年沒寫B(tài)log了,放下手中的筆,體息一下,覺得是乎應(yīng)該對自己最近的工作總結(jié)一下,拿起鍵盤,卻又不知道具體要說些什么,似乎有很多要寫的,很散,思維還有點(diǎn)亂......,還是就由著思緒來吧?~~
我所在的項(xiàng)目由于一期使用的是一個公司的開發(fā)平臺,因?yàn)槠淦脚_自身的功能限制無法擴(kuò)展、難以維護(hù)且系統(tǒng)可控制度極低,因此,客戶方?jīng)Q定在二期重新設(shè)計(jì)架構(gòu)并在新的架構(gòu)上完全重新開發(fā),而我正是在為新的架構(gòu)做技術(shù)預(yù)研,其中形形色色的問題亂如麻。
首先是JSF,我們采用的是MyFaces的實(shí)現(xiàn),服務(wù)器WAS5.1,JDK1.4.1.2,在發(fā)布JSF應(yīng)用時(shí)的第一個問題就是JSF容器無法正常初始化。這個問題很容易定位,就是由于Servlet 2.3規(guī)范對Lisener和Servlet的初始化順序要求不嚴(yán)格,從而使不同廠商有著不同的實(shí)現(xiàn)導(dǎo)致的。但因?yàn)橛信笥岩苍谑褂肑SF,且服務(wù)器版本也一致,他們沒有問題,偏偏我整死也跑不通,所以,開始覺得自己的判斷可能不對,但郁悶的是用google搜索半天沒搜到解決方案,最后沒折了,只好自己去打開JAR包看看源代碼,結(jié)果發(fā)現(xiàn)里面有個MyFacesServlet,打開一看內(nèi)容,簡直想一頭撞死,原來該類解決了2.3規(guī)范問題,從而他可以替換Linsener類的初始化職責(zé)。他在被加載時(shí)首先會檢查StartupServletContextListener有沒有正常初始化,如果未初始化則調(diào)用StartupServletContextListener進(jìn)行初始化。看來有時(shí)候還真是不能偷半點(diǎn)懶,要相信自己的判斷。
其次是JSTL,我最初用的是apache的參考實(shí)現(xiàn)1.1版本,結(jié)果整死都無法使用,總是報(bào)taglib無法解析,到網(wǎng)上查了半天,沒有一個人說具體的解決方案,沒辦法,從來沒用過JSTL啊,新手總是會碰上一臉灰的,后來打開看Tablib的版本,天啦,人家要求的是JSP 2.0,而我的還是基于2.3規(guī)范的1.2,當(dāng)然無法解析了,然后從新從網(wǎng)上DOWN個jstl 1.0下來,一跑就通!!唉,真是沒辦法,在網(wǎng)絡(luò)上,有些問題一搜就到,而有些看似簡單的問題卻能把人折騰個半死,結(jié)果發(fā)現(xiàn)你還是要自己定下心來去查,千萬不要全指望別人。又受教了。
再次SpringWebflow,到目前為此,webflow還處于1.0早期版本,現(xiàn)在還不能確定1.0正式版何時(shí)推出,做為我們來說,也算是一次大膽償試,說實(shí)話,當(dāng)前的webflow版本功能還不能足以應(yīng)用到項(xiàng)目中來,但我相信他的正式版應(yīng)該會很快推出,所以就搶先償試了,償試中的問題就不說了,就說說它現(xiàn)在的缺陷吧,
? 1.支持流程級變量創(chuàng)建,卻無法給變量賦值,郁悶,這么重要的功能居然還沒提供
? 2.調(diào)用POJO方法時(shí),必需要有參數(shù),且參數(shù)必需是在flowScope上下文里,連靜態(tài)常量參數(shù)都不支持,又狂郁悶了一把。在流程里,這是再常用不過的功能了,居然沒提供,希望正式版快快出來,并補(bǔ)上這些缺陷。要不然,他是不可能進(jìn)入實(shí)際項(xiàng)目應(yīng)用的。偶現(xiàn)在真是想修改他的代碼,把這些功能通通加進(jìn)去。。,但最終還是得先抑制住沖動---再等等看吧。。。
? 3.與JSF集成的JSP里的非受管Bean的普通JSP參數(shù)無法在flowScope里獲得,這一點(diǎn)不能肯定,有可能是轉(zhuǎn)發(fā)方式的問題,希望能修改該問題。
? 4.流程里的表達(dá)式靈活性太差,盡管是采用OGNL做的解析,但還是只能寫一些極其簡單的邏輯表達(dá)式,稍微復(fù)雜一點(diǎn)的----別想。這一點(diǎn),也有可能是我還沒用好的緣故,需進(jìn)一步證實(shí)
最后就是自定義Data Table UI組件了,我們要同時(shí)支持列表分頁,定制式的組合查詢,動態(tài)排序等;這幾功能點(diǎn)乍一聽覺得應(yīng)該不難,可一做起來,也并非易事,我現(xiàn)在沒有基于JSF的UI實(shí)現(xiàn),而是通過JSP TAG +XML+XSLT+AJAX的方式來實(shí)現(xiàn)的,其中最復(fù)雜的就是組件的參數(shù)綁定和狀態(tài)綁定的問題,服務(wù)端是無狀態(tài)模型,所有狀態(tài)及參數(shù)都保存在客戶端,解決如何能讓自己的組件里的狀態(tài)參數(shù)不與其它組件或頁面上的其它參數(shù)發(fā)生沖突是個非常重要一環(huán),另外就是SQL的解析,結(jié)果模型的抽象,轉(zhuǎn)換器的抽象,對UI前端的命令解析及執(zhí)行,參數(shù)模型的封裝,對不同的數(shù)據(jù)來源用不周的解析器等等,都是要考慮的問題,這一塊要說起來就太多了,等先把這個組件完全測通了后,再拿現(xiàn)來專門討論討論。
感想,開發(fā)一個好的框架是一個非常考水平的事情,他不是我們平時(shí)所想像中的那樣簡單地將一些現(xiàn)成的開源框架拼湊起來就了事的,他涉及到了項(xiàng)目群的協(xié)模式,系統(tǒng)架構(gòu),各層所選用的技術(shù)框架特性,業(yè)務(wù)集成等方方面面,即使使用Spring這種幾乎現(xiàn)成的框架來做為系統(tǒng)的主干骨架,做為框架設(shè)計(jì)者,你要做的事還很多,你要從系統(tǒng)總體角度去考慮系統(tǒng)的邏輯模式,與外部系統(tǒng)的協(xié)作模式,系統(tǒng)的可擴(kuò)展性和低侵入性;你要讓開發(fā)人員盡可能的少做重復(fù)勞動;你還要保證你所選的技術(shù)方案能在開發(fā)過程中無障礙;你要做好解決開發(fā)過程中的所有技術(shù)難題的準(zhǔn)備;除了這些,更關(guān)鍵的是你還要能做好業(yè)務(wù)模型的抽象和設(shè)計(jì),你要能及時(shí)或預(yù)先發(fā)現(xiàn)潛在風(fēng)險(xiǎn)和問題并解決它。。。。等等,太多太多。。。,而我,現(xiàn)在要行的路還長得很.....