這些年大家都在說(shuō):Swing學(xué)起來(lái)費(fèi)勁,用的也不多,見(jiàn)到的應(yīng)用也不多,能做大型應(yīng)用么?最近還有朋友看了幾刀之后就說(shuō),哎呀快去學(xué)Swing吧,做東西好漂亮!其實(shí)這不僅讓人哭笑不得:幾年前大家還是一邊倒的打罵Swing太丑,都說(shuō)Flex啥的漂亮,突然有人夸起Swing做東西漂亮來(lái)了,還真很不適應(yīng)。還有人說(shuō),Swing快不行了,Sun也不行了,Oracle也不行了....其實(shí)在他們眼里,也許Java也不行了,軟件開發(fā)也不行了....那到底Swing做大應(yīng)用能行嗎?通過(guò)自己參與的項(xiàng)目經(jīng)驗(yàn)來(lái)說(shuō):這個(gè)真的行!
這幾年一直在做Swing的開發(fā),有幸參與了公司一個(gè)大型的ERP項(xiàng)目。這個(gè)ERP項(xiàng)目規(guī)模很大,我的NetBeans工程里就有150多萬(wàn)行代碼,還不包括其他小組的分支模塊。前端除了桌面客戶端外,還有瀏覽器和手機(jī)終端,不過(guò)最重要的還是Swing版的桌面客戶端。這個(gè)Swing版的ERP客戶端開發(fā)了已經(jīng)7年多了,JDK從1.3一直升級(jí)到現(xiàn)在的1.6,IDE也從IDEA、JBuilder到Eclipse、NetBeans。不過(guò)核心框架一直沒(méi)有什么大變化,應(yīng)用也比較成熟。
這是一個(gè)大型的ERP系統(tǒng),典型的C/S結(jié)構(gòu),也混合了一些B/S結(jié)構(gòu)和手機(jī)終端的模塊,不過(guò)主要內(nèi)容還是在龐大的后端和Swing的前端。后端主要用J2EE架構(gòu)搭建,通過(guò)JBoss應(yīng)用服務(wù)器和MySQL數(shù)據(jù)庫(kù),Hibernate做O/R,自己封裝DAO層以及Business層控制業(yè)務(wù)邏輯,再用Ejb進(jìn)行業(yè)務(wù)API封裝。最后,通過(guò)一個(gè)Facade層的EJB(后來(lái)改造成Servlet)對(duì)外提供統(tǒng)一的訪問(wèn)接口。這個(gè)接口也是整個(gè)后臺(tái)唯一的訪問(wèn)接口,這個(gè)“一夫當(dāng)關(guān)、萬(wàn)夫莫開”的入口處,再插入登錄和會(huì)話管理、安全控制、日志記錄、請(qǐng)求分發(fā)等機(jī)制,干凈簡(jiǎn)潔。通訊協(xié)議,以前通過(guò)EJB和IIOP的協(xié)議開放API提供遠(yuǎn)程調(diào)用,后來(lái)發(fā)現(xiàn)EJB的通訊非常異常繁瑣和“重”,各種控制比較復(fù)雜,效率也不好。后期版本改造為用一個(gè)Servlet封裝對(duì)外提供接口,協(xié)議也變成了HTTP。這樣,后臺(tái)通過(guò)一個(gè)80端口,以類似WEB的方式統(tǒng)一提供前端的API訪問(wèn)。對(duì)很多人來(lái)講,這個(gè)方式可能有點(diǎn)奇怪:Swing的胖客戶端,還用HTTP的WEB協(xié)議來(lái)訪問(wèn)后臺(tái)。嘿嘿,其實(shí)這一招不錯(cuò)哦,仔細(xì)琢磨一下會(huì)體會(huì)到其妙處。
前臺(tái)是一個(gè)完整的Swing程序,也是通過(guò)層層封裝,提供了一層與服務(wù)器一一對(duì)應(yīng)的API訪問(wèn)層,最后通過(guò)一個(gè)統(tǒng)一的代理類,對(duì)后臺(tái)進(jìn)行訪問(wèn)。通過(guò)HTTP如何傳輸Java對(duì)象呢?我們沒(méi)有使用Web Services之類的技術(shù),而是直接把要調(diào)用的方法以及參數(shù)等信息序列化,以HTTP方式提交后臺(tái),后臺(tái)通過(guò)模塊分發(fā)、反射的方式執(zhí)行函數(shù)后, 把結(jié)果數(shù)據(jù)進(jìn)行序列化,再經(jīng)過(guò)壓縮,通過(guò)HTTP返回客戶端。客戶端將數(shù)據(jù)解壓、反序列化,將對(duì)象再返回API的調(diào)用者(如各個(gè)界面、按鈕等)。這個(gè)結(jié)構(gòu)非常高效、可靠。甚至包括函數(shù)的異常等,都可以通過(guò)序列化進(jìn)行傳遞。
通過(guò)HTTP的方式,服務(wù)器不再需要防火墻開放更多端口,和web應(yīng)用一樣,一個(gè)80就行了。另外,和web傳遞html等信息不同,這種結(jié)構(gòu)下,中間傳遞的就是壓縮過(guò)的Java對(duì)象序列化后的字節(jié)流,其效率是很高的。客戶端是胖結(jié)構(gòu),自然可以處理更多的數(shù)據(jù)處理和呈現(xiàn),比瀏覽器也有優(yōu)勢(shì),很合適ERP這種企業(yè)應(yīng)用。輕量、高效的結(jié)構(gòu)也提供了很好的業(yè)務(wù)支撐能力:一臺(tái)普通的臺(tái)式機(jī)可以提供100個(gè)ERP用戶同時(shí)在線、比較流暢的使用。這對(duì)于沒(méi)有專門預(yù)算購(gòu)買專業(yè)服務(wù)器和建設(shè)機(jī)房的企業(yè)來(lái)說(shuō),是非常給力的。
至于Swing的客戶端是否能做的好看,這個(gè)就要看是否用心了。只要用心,什么UI技術(shù)其實(shí)都無(wú)所謂,都可以做出漂亮的應(yīng)用。這里提供兩張貼圖,是否好看還是仁者見(jiàn)仁、智者見(jiàn)智了。


通過(guò)這兩年的Swing開發(fā),也總結(jié)了一點(diǎn)經(jīng)驗(yàn),和大家分享:
- Swing入門較高,有一定的學(xué)習(xí)曲線。企業(yè)在選擇是否采用Swing技術(shù)之前,一定要分析是否合適自己的團(tuán)隊(duì)。如果沒(méi)有一個(gè)半個(gè)Swing比較好的骨干帶領(lǐng),Swing的復(fù)雜度很容易讓整個(gè)項(xiàng)目代碼失控,最后變成一個(gè)“好大好大好大的垃圾堆”。
- 代碼要盡量一層一層的搭框架,不斷的重構(gòu)、優(yōu)化、復(fù)用,不可每個(gè)人按照自己喜好自搞一套,否則很容易失控;代碼和風(fēng)格甚至開發(fā)工具都要盡量一致,避免維護(hù)的麻煩。
- 找一個(gè)好的美工。美工設(shè)計(jì)很重要,他(她)會(huì)從不同于程序員的眼光來(lái)創(chuàng)建和設(shè)計(jì)UI,我們一定要尊重美工的設(shè)計(jì)思路,不要輕易指手畫腳、大放厥詞。術(shù)業(yè)有專攻,要知道,在美術(shù)方面咱們程序員大多是小學(xué)生水平。一旦設(shè)計(jì)風(fēng)格確定,就嚴(yán)格按照統(tǒng)一的風(fēng)格進(jìn)行開發(fā),每一個(gè)對(duì)話框、每個(gè)按鈕、每個(gè)圖標(biāo)。讓一個(gè)ERP中成千上萬(wàn)的對(duì)話框都“如出一轍”確實(shí)不易,不過(guò)應(yīng)當(dāng)是目標(biāo)。
- 永遠(yuǎn)從“用戶”角度設(shè)計(jì)UI。開發(fā)UI也是設(shè)計(jì)的過(guò)程,美工沒(méi)可能把一個(gè)ERP系統(tǒng)中成千上萬(wàn)的對(duì)話框都設(shè)計(jì)出來(lái),程序員這時(shí)候就是半個(gè)美工、半個(gè)用戶。讓大腦里時(shí)刻存在一個(gè)“用戶”并時(shí)刻敲打自己:這個(gè)界面好用嗎?這個(gè)報(bào)表能看懂嗎?這個(gè)按鈕位置合適么?做軟件就像蓋大樓,地基結(jié)實(shí)固然重要,窗戶密封性就不重要了嗎,外墻涂料就不重要了嗎?要做百年屹立的優(yōu)質(zhì)工程,就得處處關(guān)注細(xì)節(jié)。別忘了房子是用來(lái)住的,軟件是用來(lái)用的。
再對(duì)這個(gè)ERP簡(jiǎn)單介紹一下。這是一個(gè)專門針對(duì)制造行業(yè)設(shè)計(jì)的大型ERP,模塊涵蓋工程設(shè)計(jì)控制、圖紙、物料、物料清單、采購(gòu)、銷售、庫(kù)存、MRP、生產(chǎn)、工單、質(zhì)量、財(cái)務(wù)、客戶服務(wù)、人事、安全等等。尤其適合“按單生產(chǎn)”類型的離散型制造企業(yè)。用戶有Wexford、Whetherford等國(guó)際巨頭,也有中海油這樣的大型國(guó)企,更多的是中小企業(yè),我還碰到過(guò)只有一臺(tái)電腦的私人老板,也在用我們的ERP,而且用的還很不錯(cuò),很匪夷!
最后再說(shuō)一個(gè)難以置信的事實(shí):這是一個(gè)免費(fèi)軟件。呵呵,這年頭,ERP軟件都可以免費(fèi),沒(méi)錯(cuò),完全徹底的免費(fèi),自己玩、商用、學(xué)習(xí).......隨便啦。
感興趣的朋友到網(wǎng)站拖一個(gè)下來(lái)耍耍,希望會(huì)對(duì)Swing的能力信心爆棚。不過(guò)中文版還在緊張翻譯中,需要一段時(shí)間才能提供下載。先玩玩英文版吧,相信大家的英文都可以應(yīng)付。網(wǎng)站是:
www.2bizbox.com,點(diǎn)擊就能下,不需要注冊(cè)。
補(bǔ)充:上面有兩個(gè)下載:一個(gè)是exe的setup安裝,一個(gè)是直接解壓即可運(yùn)行的zip包。后臺(tái)其實(shí)也可以跑在linux等上面,啟動(dòng)腳本需要自己寫一下了。
歡迎喜歡Swing和ERP的朋友一起探討,祝大家元旦快樂(lè)!
前幾天菜市場(chǎng)買了一個(gè)風(fēng)信子,開始水培。
posted on 2011-01-18 15:12
zhangchuanzheng 閱讀(2240)
評(píng)論(2) 編輯 收藏