現在ajax實現太過火了,什麼都向上面靠。其實早在2000前以前,WEB開發人員就已經在用Frame/Frameset來實現遠端資料的擷取。後來IE成為事實上的B端標準之後,IFrame就成了做遠端資料擷取的“標準手段”了。——例如M$就用這種方法來做MSDN網站左側的那個“巨大的樹”。
在ajax出現之前,這一系列的技術被稱為“RPC(Remote Procedure Call)”,象XMLRPC、HTTPRPC以及PHPRPC這些開源項目都是有的。PRC的一個問題,是必須實現一個S端,與WEB端的代碼約定一個描述過程名(ProcedureName)和參數表的細節的介面。這其中,我比較欣賞的是一個名為“JSRS(javascript remote scripting)”的項目,它在S端有PHP/ASP等多種語言的實現。
現在也還有在RPC這個路線上延伸的技術嘗試。例如有人用css或者script標籤來替代IFrame實現RPC。
RPC時代之後,就是ajax的時代了。ajax本意是“Asynchronous JavaScript and XML”。從本意上來說,它只是一種技術架構。是B/S兩端互動資料的一種技術方法。但由於ajax主張使用XMLHttpRequest來替代RPC技術中的IFrame。這使得在瀏覽器上能有“無介面重新整理”的良好使用者體驗。再加上現在火熱的google成功地實現了“商業品質的應用”。因此ajax技術應用變得非常廣泛。——但僅以跨瀏覽器特性而言,(現在的)IFrame的相容性也極佳。
由於ajax以xml作為傳輸層中表達資料的規範,因此它有良好的多語言編碼基礎,也能表達很複雜的資料結構。這也是傳統的RPC方式所不能比擬的。
除去這些特性,ajax(的本意)就只是一種技術手段了。
然而現在的ajax狂熱者們把ajax的應用推動另一層“境界”。由於ajax使用xml,因此可以在S端將對象序列化為XML資料;而在B端,由於javascript是一種“有良好的邏輯處理能力”的“基於對象的語言”,因此可以用將XML解釋成用戶端對象。——從外在的表現上來講,ajax實現了“將S端的對象推送到B端”的能力。
這是目前ajax技術的主要發展方向之一。“如何在S端和B端用同樣的方式‘表達’和‘理解’對象”,以及“讓對象的可執行能力被序列化,並推動到B端”是ajax面臨的問題。而第一層障礙,就是JavaScript自身對“物件導向”支援的不完整,因此無法表達一些S端對象的特徵。
——例如如果S端是.NET,它的對象A有一個具有讀寫器(getter/setter)的特性,那麼對象被序列化並傳到B端的時候,JavaScript如何理解對象A中的讀寫器呢?所以ajax現在都是與一個“實現了更豐富的OOP特性的javascript”綁在一起的。
我想大家應該看到了問題之所在了。“實現更豐富的OOP特性”與“ajax(非同步JS與XML)”有什麼關係呢?ajax提出了一個語言層級的需求,然後有一些架構/項目去實現了這些語言特性,再綁在ajax上。ajax就這樣越做越大。現在的ajax,已經變成“語言特性的實現+編程架構+技術”,而不是ajax技術本身了。
Qomo並不去追究這種技術的演化與變形。Qomo關注於一些“語言特性的實現”,也關注於一些“編程架構”的實現。在這兩種實現的基礎上,Qomo提供了一個輕量的ajax實現技術的架構,也提供了一套(相對於FCL/VCL)輕量級的Component Library。
這裡既然提到了Qomo的特性,那麼我就將我在sourceforge上申請create project的描述轉過來。大家可以自己來比較分析:
Qomo OpenProject is a True and Full OOP framework and UI Library.
{ note: # implemented, + implementing, * planning, - tring }
include features of OOP:
# inhreited by class
# attribute getter/setter
# type system of object
# abstract and abstract exception
# mutilcast event
+ interface in javascript
# namespace system
# package/unit import
# tiny ajax architecture
+ SOA Architecture
* template programming
- more...
include features of UI:
# tidy component framework
# graphics abstract level and a VML implement
# database abstract level and a ArrayDB/FileDB implement
# html element controller and some control component
# bar, menu, window, etc. in virsual component library.
* more component, mount a tidy(very very) FCL or VCL.
- more ...
other features:
# some utils class.
# auto class inhnert chart scan and generable
# document generable tool (C# source)
# testing and profing tools (JavaScript Source)
- OOP Core and UI can debugging and designing in VS.NET IDE.
- more ...
the project extracted from a enterprise project. free and open source for all JavaScript fans, and hope anybody join/impulse the project.