2005年11月17日
聲明性與過程性是計算技術的兩個重要的方面。聲明性用來描述做什么,至于怎么做,它假設有一個強大的解析器來完成一切。比如我們熟悉的SQL主要就是一個聲明性的語言,通過它你只要表達你想要得結果,而如何得到結果DBMS自然有它怎么做的一套策略。相對于聲明性來說,過程性強調表達怎么做,比如我們熟悉的各種程序設計語言主要是用來表達怎么做的。
好了說了這么一通,來談談GUI吧。如果大家用Swing或其它GUI框架手工寫過比較復雜的GUI程序,那么一定會感覺到相當的繁瑣,以后如果要修改的話那就更加麻煩了。很明顯將GUI直接表達在程序中是相當死的,既繁瑣又不靈活。所以出現了XUL,XAML,XSWT,XwingML等用來描述GUI的聲明性語言。不過GUI不應該是死的,它還要和用戶交互。通常這種對用戶的反應很難用聲明性的方式表達,因為這是運行時的,它由運行時的情況決定。所以很多技術都考慮如何在這些聲明性的語言中加入過程化的表達。例如,HTML+XXXScript,但是我覺得這種混合方式很混亂不利于維護,在加上HTML的表達力有限,所以web的交互很糟糕。XwingML可能很多人不熟悉,它是用來描述Swing的,現在已經很難找到了。在XwingML中可以將Listener 寫入在XwingML以XML定義的聲明性語言中,在GUI組件構建起來時,Listener對象也會被構建起來并注冊到相應的GUI組件上。當然這件事情是由支撐該聲明性語言的XwingML引擎來做。相對于HTML+XXXScript它更加模塊化。不過我覺得它還是沒有達到GUI上聲明性與過程性的較好結合。
其實我很希望哪位高手能關于這個主題給出一些指點,希望不吝賜教。