在(3)中,簡(jiǎn)要介紹了整個(gè)Flex版設(shè)計(jì)器的整體架構(gòu),那么今天就進(jìn)入比較細(xì)粒度的Flex GEF的內(nèi)核看看。
既然名稱中有“GEF”,那么肯定會(huì)與Eclipse GEF的設(shè)計(jì)會(huì)有所類似,事實(shí)上,本身就是借鑒GEF的設(shè)計(jì)思想和對(duì)象概念模型,只是做了改造和簡(jiǎn)化。
如下圖所示。
其最基本的核心在于“IModel、IEditPart、IFigure”,這構(gòu)成了MVC的核心對(duì)象模型。
IModel的變更會(huì)通知IEditPart這個(gè)控制器,由控制器刷新IFigure。—— 不過(guò)此處并沒(méi)有采用EMF那種對(duì)象結(jié)構(gòu):EMF在底層對(duì)Model的所有屬性變更都做了監(jiān)聽(tīng),任何變更都會(huì)引發(fā)Notifor操作,從而利用監(jiān)聽(tīng)器來(lái)處理notification。在我最初的設(shè)計(jì)中,原本也想這么操作的,不過(guò)后來(lái)摒棄這個(gè)思路。如果在底層再引入一個(gè)類似EMF的框架,會(huì)再引入大量的基類,無(wú)形中增大了最終flash文件的大小。所以,此處雖然也支持Notifor操作,但是都是“外圍顯示主動(dòng)通知Notifor”的方式,而且拋棄了Notification這一層。—— 這樣的結(jié)果就是,我在command中,并不是非常徹底的只操作Model,或多或少都會(huì)會(huì)顯示引發(fā)對(duì)EditPart的處理操作。(這是一個(gè)很“拖泥帶水”的實(shí)現(xiàn)方式,但是處理方式要簡(jiǎn)化很多,而且節(jié)省了很多底層代碼,縮減了flash文件)。
當(dāng)然,每一個(gè)Editor都會(huì)維持一個(gè)屬于其自己的EditDomain,用于記錄在當(dāng)前操作空間的一些對(duì)象,比如“commands”、“那些對(duì)象被選中”、“Figure或Model與EditPart的快速索引”等等。
另外,每個(gè)Editor都會(huì)由一個(gè)Viewer來(lái),定義當(dāng)前顯示方式。同時(shí),利用EditPartFactory、ModelFactory、FigureFactory來(lái)創(chuàng)建相應(yīng)對(duì)象。上層業(yè)務(wù)層真正需要實(shí)現(xiàn)不同的Factory(已經(jīng)包括相應(yīng)的model、editpart、figure),這樣就可以很容易快速實(shí)現(xiàn)不同“視圖展現(xiàn)模式”。—— 外圍大量的擴(kuò)展代碼都是在這個(gè)地方。
當(dāng)然,這里面有一個(gè)“Figure”概念。早在(1)中,就已經(jīng)簡(jiǎn)單提過(guò),F(xiàn)igure并不是Flex中的概念,只是用用于“聲明這是一個(gè)GEF中的圖形”而已。( 注:這個(gè)Figure的處理很有技巧性,處于商業(yè)產(chǎn)品的限制,我無(wú)法更多的在這里做詳細(xì)解釋,大家只能自己揣摩了 )
當(dāng)然,真正的Flex GEF內(nèi)核實(shí)現(xiàn)要比上面圖形中的展現(xiàn)復(fù)雜不少。但基本邏輯關(guān)系的核心已經(jīng)表示差不多了。
這部分內(nèi)容也只能“點(diǎn)到即止”,畢竟本身屬于商業(yè)產(chǎn)品范疇。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
