透徹闡述 ExtJS 4 的MVC【有圖有真相】

ExtJS是我聽說了很久的一個js框架了,但是從來就沒有用過,讀研期間寢室裏有個小哥在用,不過那時候醉心於WordPress開發,也懶得理會了。現在公司裏,有個上線系統用到了這個框架中的一個TreePanel組件,整個界面上,就正中間扔了一個tree panel,而且不知道什麼原因,CSS還有bug,把按鈕都搞破了,弄得醜陋不堪,我於是自告奮勇,仔細調試,終於修復了那個顯示上的bug,從此算是初次結識了ExtJS。它真正吸引我的原因是,它能夠把富客戶端應用的開發,從美工和基礎交互中解放出來,只需要專注於業務邏輯開發即可,從而讓後臺工程師也能夠有能力快速開發外觀專業的網站應用系統。我覺得這真是功德無量的一個事情。(如果我直覺沒錯,Flex框架也是這一類東西,這也是我對其有興趣的原因,當然還沒有時間嘗試)

據官網介紹,還有據同事ishow的描述,ExtJS 4.x 是一個變化很大的版本,相比已經應用廣泛的 3.x 來說,變了很多、新特性也很多,MVC就是它提供的新特性之一。由於我最近半年都在學習MVC模式(主要是使用Yii框架),所以這個名詞更是引起了我濃厚的興趣,這幾天都在官網上看這個框架MVC的例子,直到今天,總算是摸着一點門道,於是畫了上面那個圖。這個四不像的圖,是我個人對框架的理解的第一個具體化產物。

下面簡單描述一下這個圖。

1. 每個應用都有一個實體,就是Application對象實例,而每個應用同樣也採用單一入口結構,有個快捷函數就是Ext.application({config}),創建一個Application對象實例,並且運行它;這裏行爲表現和Yii框架的Application看起來很像,創建一個實例,然後run;

2. Application在創建之初,會去加載Controller類,加載完畢後,會正式的lunch;

3. Application在lunch的時候,會創建一個Viewport對象實例,這個東西就像一個骨架一樣,上面可以拼裝各種View,具體說,就是各種佈局形式和窗體控件,可以說是應用界面的載體;

4. Controller的角色完全是個粘合劑,它在加載之初,會幫忙加載跟其有關的Model,Store,View類,而其真正的作用,是通過一系列的事件處理函數,確定了每個View上面界面組件對用戶交互行爲的響應方法,可以說是一堆事件處理器函數的集合;這裏面主要通過一個control成員函數來進行事件綁定,通過另一個叫ComponentQuery的組件,使用類似css selector的語法來定位界面上的組件,併爲其綁定事件處理器;

5. Model是對抽象數據的具體化,或者可以這麼理解,就是數據庫裏面的一行記錄,到底是怎麼變成一個對象的,將數據庫字段變成了對象的屬性的對應關係;而這裏比Yii框架MVC模型多出來的東西,就是Store這個東西,在Yii框架裏面,有強大的ORM系統,還有強大的AR將Model直接連接到了DB上,數據一出來就直接變成了對象,而在ExtJS框架中,代碼全在客戶端,勢必就出現了透過網絡來加載數據需要,而我認爲,Store就是對通過網絡來加載數據的過程的一個抽象,Store依賴於Model,通過關聯的Model對象來獲知如何將取回的數據對象化,以方便View展現,所以View是依賴Store對象的;(這裏岔開一點,感覺這個Store的設計理念或許可以借鑑,由於某些原因,我們在使用PHP框架的時候,不能讓Model直接連接DB,是不是也可以把數據取回最終拼接成Model對象的這個過程給抽象化成類似ExtJS中Store的這套機制呢?)

6. View就純粹是一個界面組件,或者說窗體控件的集合,通過Store來加載數據並且展現到界面上,界面控件的響應都寫在Controller裏面,View對Controller的存在全無所知,也沒有代碼上的依賴;

總結一下,感覺這套系統的好處是在於,將View和Model都給抽象了出來,以至於它們可以更加好地被複用,做好一個面板,所有的地方都可以調用,而真正業務邏輯又被很好的封裝在了Controller裏面,這樣也便於去模塊化地開發系統,基本感覺上,是一套非常優秀的框架,由於我對ExtJS 3系列版本,沒有任何經驗,也就沒法做出其相對於先前版本是否有質的飛躍的判斷,通過仔細的挖掘,我發現其易用性上確實比我原來想象的要好,開發人員可能沒太多必要去糾結於內部原理,只要理解到跟我現在差不多的樣子,就可以快速上手去做一些東西出來,當然還是必須看着文檔按圖索驥的,嘿嘿
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章