GEF學(xué)習(xí)筆記(二) 模擬GEF設(shè)計(jì)思路,解剖GEF 1
GEF如同其他的一些framework一樣,是一個(gè)復(fù)雜龐大(有點(diǎn)夸張
)的,當(dāng)我們想使用駕馭它時(shí),就必須全面的理解其整體構(gòu)架及其運(yùn)作過(guò)程。這需要我們的毅力和敏銳。旅途開(kāi)始了….
GEF主要的任務(wù)是針對(duì)2D圖形編輯操作,如下圖。
為了使GEF能夠廣泛的用于種類繁多2D圖形編輯領(lǐng)域,GEF就必須建立一個(gè)嚴(yán)格的易擴(kuò)充/易組合/易重用的MVC框架(當(dāng)然這種分解細(xì)化功能對(duì)象的方法思想,我們可以用在其它的地方,其它領(lǐng)域、其他語(yǔ)言如C#上)。
那么如果設(shè)計(jì) 這個(gè) 嚴(yán)格的MVC框架(對(duì)于Model是嚴(yán)格的獨(dú)立,它不依賴與View和Controller) 以及 此框架 如何 達(dá)到 易擴(kuò)充/易組合/易重用 的特性。下面我按照自己拙劣的思路,以麻雀之眼度鴻雁之志啦
對(duì)于MVC中
View部分:GEF理所當(dāng)然要使用自家的東東Draw2D。利用Draw2D的Figuer作為自己的View。
Model部分:往往內(nèi)部包含了千差萬(wàn)別、不可預(yù)知的商業(yè)信息。因此、GEF框架應(yīng)該盡量減少約束(在下面將詳細(xì)說(shuō)明約束)。
Controller部分:EditPart/Draw2D的Figure/Model這三個(gè)樹(shù)狀對(duì)象模型,在EditPart中將建立了與其對(duì)應(yīng)的Draw2D的Figure/Model結(jié)點(diǎn) 建立一一關(guān)聯(lián)的關(guān)系。
這樣產(chǎn)生的構(gòu)架如下:
思考:
為什么Controller要同View一樣采用樹(shù)狀結(jié)構(gòu)呢?
當(dāng)Controller以樹(shù)狀的形式存在,這樣便于功能分解(這個(gè)道理有點(diǎn)像 在類設(shè)計(jì)中 復(fù)合優(yōu)于繼承 一般)
這樣每一結(jié)點(diǎn)的Controller(即EditPart) 僅需要處理
- 自身邏輯功能
- 管理子Controller
- 必要時(shí)通知父Controller
尤其當(dāng)用戶需要在圖形界面編輯界面中,需要使用多種不同UI行為規(guī)則的2D元素(例如不同的形狀塊,不同行為的連線等)組合來(lái)完成工作時(shí)(例如類似Visio這樣的界面),這種構(gòu)架的優(yōu)勢(shì)就顯露無(wú)疑。
未完待續(xù)….(下面要探討如何產(chǎn)生上述三個(gè)樹(shù)狀模型等。)