Realease在即,而Mock-up卻還在更新,這就是我目前的境況。要命的卻是還有一個(gè)從來沒有涉獵過的領(lǐng)域擺在我面前,那就是GEF,Eclilpse最復(fù)雜的框架之一。我一向推崇簡(jiǎn)單就是美,Java搞了這么多年,但是越搞越復(fù)雜,Eclipse也是如此。最令人推崇的Eclipse開發(fā)版本還是2.1.2,相對(duì)于2.1版本,3.2簡(jiǎn)直就是蝸牛。而我們卻要無休止緊跟著Eclipse的腳步,它走一步,我們就要前進(jìn)一步。我以前甚至不屑于使用JFace,更何況這個(gè)傳說中的GEF,玩玩還可以,使用它那還不是要我的小命。
不過框架自有框架的好處,如果能夠熟練使用,可以少寫很多代碼,因此能夠使項(xiàng)目速成。我現(xiàn)在要做的是一個(gè)數(shù)據(jù)庫(kù)表索引關(guān)聯(lián)編輯器,功能其實(shí)不多,但是麻雀雖小,五臟俱全,一個(gè)完完整整地GEF應(yīng)用。拖拉暫且不說,是GEF的基本應(yīng)用,最麻煩的其實(shí)還是各個(gè)表初始化的布局,需要寫一個(gè)自己的布局管理器。如果要自己從頭寫而不用GEF,估計(jì)一個(gè)月怎么也夠嗆。現(xiàn)在采用GEF,我想半個(gè)月就差不多了,不過學(xué)習(xí)成本昂貴呀。我得承認(rèn)我嚴(yán)重低估了GEF的復(fù)雜度,到目前為止,我已經(jīng)研究了三四天,才剛剛能夠進(jìn)行簡(jiǎn)單應(yīng)用。看書,找資料,研究框架的構(gòu)架,都是扯淡,看了八進(jìn)制的文章,仍舊是一頭霧水。看別人的容易,變成自己的就太難了,什么事情都還要靠自己領(lǐng)悟才行。
還好我是多條路并行采用了。雖然我眼下的項(xiàng)目可以稱得上是最復(fù)雜的GEF應(yīng)用之一(源代碼打ZIP包都快30M了),但身邊能用GEF開發(fā)的高手卻屈指可數(shù),Manager估計(jì)早就想讓我搞這個(gè)玩意了。JFace我都是速成的,現(xiàn)在已經(jīng)很熟練了。順便說一下TreeViewer這個(gè)東西,它的顯示邏輯全部都是通過Provider來實(shí)現(xiàn)的。顯示的時(shí)候就會(huì)通過getChildren從上往下走,找一個(gè)節(jié)點(diǎn)的時(shí)候則是通過getParent從下往上走,現(xiàn)在就有一個(gè)問題了,如果我setInput的Model的內(nèi)部邏輯和我要顯示的外部邏輯相差比較大,那么如何實(shí)現(xiàn)?在這兒適配器是不能工作的,因?yàn)闇贤ㄊ请p方的,適配器則是單方的。如果用一個(gè)虛節(jié)點(diǎn)來代替Model實(shí)際上沒有的顯示邏輯,那么虛節(jié)點(diǎn)的兒子(一個(gè)Model實(shí)體)通過getParent是找不到那個(gè)虛節(jié)點(diǎn)的,它只知道自己的實(shí)體父親。封裝所有的Model也是不可取的,要不要Model干什么。我想TreeViewer碰到這樣的應(yīng)用就會(huì)無能為力了。
現(xiàn)在說一下框架速成大法:
1、問,自然是問高手了。高手會(huì)一針見血的把問題找出來,并能告訴你框架的整體結(jié)構(gòu),通過現(xiàn)場(chǎng)演示,能夠讓你的腦子對(duì)框架有一個(gè)整體的認(rèn)識(shí),這可比看文章接受的快多了。我同事已經(jīng)被我折磨了一個(gè)禮拜了。在問和解答的過程中,大家都能夠發(fā)現(xiàn)自己的不足,如果兩個(gè)人在一起編碼,又是一個(gè)結(jié)對(duì)編程的過程,這個(gè)時(shí)候2個(gè)人的腦子思維都會(huì)很清晰。
2、Debug,找一個(gè)和自己相近的應(yīng)用。每一個(gè)框架,作者一般都會(huì)提供一些例子,而且這些例子雖然簡(jiǎn)單,卻基本上包含了框架的方方面面。要想應(yīng)用框架,最終是需要自己寫代碼的,代碼在哪兒找,就是作者的例子里找。看看例子里有多少應(yīng)用是自己需要的,找到合適的地方Debug一把,一步一步地跟下去,很快你就能夠通過堆棧信息以及源碼了解應(yīng)用的整個(gè)步驟,然后用Copy大法,一個(gè)自己的應(yīng)用就創(chuàng)建出來了。
當(dāng)然第二點(diǎn)依賴于第一點(diǎn),初學(xué)者是很難尋找合適的斷點(diǎn)進(jìn)行跟蹤,所以需要找個(gè)高手過來,讓他來跟,他演示的過程就是自己學(xué)習(xí)的過程。有了自己的第一桶金,后面的路就已經(jīng)很平坦了。一個(gè)人對(duì)于未知領(lǐng)域的恐懼并不是怕自己不能掌握,而是不知道自己要花多長(zhǎng)時(shí)間來掌握它。通過3天的速成,雖然對(duì)GEF的整體了解是管中窺豹,但我已經(jīng)心里非常有底了。現(xiàn)在已經(jīng)能夠把Tabel以及里面的Column畫出來,而且已經(jīng)實(shí)現(xiàn)了布局,拖拽等基本事件,剩下需要研究的東西不會(huì)太多,夠用就行。技術(shù)這個(gè)東西,不怕不了解,就怕不會(huì)學(xué)習(xí),很多時(shí)候,等到要用到的時(shí)候再學(xué)也不會(huì)遲,關(guān)鍵是要掌握正確的學(xué)習(xí)方法。