公告欄裡寫到:Dojo的高門檻一旦跨過,必將別無所求。含義有二:第一,Dojo難學;第二,Dojo很強大。
這也揭示了本部落格的目標:協助大家用好Dojo這個優秀的Ajax架構。
在回答為什麼選擇Dojo之前,我們看看哪些人已經選擇了Dojo:
既然能被眾多著名IT公司支援,Dojo必然有它的獨特之處,那就是:架構。
一個穩定、可擴充、可維護的架構是所有高品質應用的基石。如果所有人都按自己的思路隨心所欲的寫代碼,那就不會有那麼多軟體方法學,設計模式的存在。Dojo在一定程度嚴格規定了這樣的開發規則,這也是很多人難以上手的原因。
以典型的資料,邏輯,表現的三層架構為例,來看看Dojo中樹(Tree)是如何設計的:
樹形結構是各種開發最常用的一個組件,其本質是:一種資料表現視圖,負責處理使用者互動(邏輯)和內容展示(表現),不儲存任何資料。Dojo中的樹完全符合這樣的本質,所有資料的儲存和對資料的操作都是通過專門的DataStore來實現。
因此,當我們習慣性的想用Tree.addNode(text)這樣的方法去增加一個節點時時,卻探索方法不存在。而正確的做法是:通過DataStore來增加一條資料,Tree會自動的更新資料的變化到介面。修改刪除節點也是同樣的邏輯,甚至節點的按需載入(Lazy Load)也是DataStore的邏輯,而不是Tree的。這實現了資料層的分離。
同樣,當我們習慣性的想給一個樹節點的icon屬性指定一個圖片路徑,來改變節點的表徵圖,這在我們需要根據節點內容決定表徵圖時很常用。但我們卻會發現無法找到這樣的API。正確的做法是派生一個新類,重寫getIconClass方法去改變節點的CSS Class,再通過CSS來指定節點的表徵圖。這實現了表現層的完全分離。
顯然,這個Tree很難用。要建立一個樹,我們首先得學會DataStore,熟悉它的API;還得知道如何從Dojo的Tree去派生新類來重寫方法,這又要去瞭解整個Dojo的類的繼承機制。很多人開始抱怨,Dojo真難用。但其實只要前進一步,就會海闊天空。
表面上看,這些架構和模式,增加了開發難度。而實際上,它卻增加了代碼的健壯性和可維護性。在這樣一個實際開發代碼只佔整個項目時間10%的沒有銀彈的時代,架構才是提升整個軟體品質的關鍵。良好的架構,可以大大降低整個項目的風險。而從Dojo中,我們能夠潛移默化的學習到Ajax應用應該如何去設計。
很多時候,最好的選擇就是自己最熟悉的工具。但如果恰好這個最熟悉的工具又是一個強大的工具,那將事半功倍。當你需要去開發一個長期的或者大量使用Ajax的應用,Dojo將是最好的選擇。
從熟悉到習慣之後就會發現,Dojo的門檻其實並不高。
by Nate,2010-6-12