2005年11月17日
聲明性與過(guò)程性是計(jì)算技術(shù)的兩個(gè)重要的方面。聲明性用來(lái)描述做什么,至于怎么做,它假設(shè)有一個(gè)強(qiáng)大的解析器來(lái)完成一切。比如我們熟悉的SQL主要就是一個(gè)聲明性的語(yǔ)言,通過(guò)它你只要表達(dá)你想要得結(jié)果,而如何得到結(jié)果DBMS自然有它怎么做的一套策略。相對(duì)于聲明性來(lái)說(shuō),過(guò)程性強(qiáng)調(diào)表達(dá)怎么做,比如我們熟悉的各種程序設(shè)計(jì)語(yǔ)言主要是用來(lái)表達(dá)怎么做的。
好了說(shuō)了這么一通,來(lái)談?wù)凣UI吧。如果大家用Swing或其它GUI框架手工寫(xiě)過(guò)比較復(fù)雜的GUI程序,那么一定會(huì)感覺(jué)到相當(dāng)?shù)姆爆崳院笕绻薷牡脑捘蔷透勇闊┝恕:苊黠@將GUI直接表達(dá)在程序中是相當(dāng)死的,既繁瑣又不靈活。所以出現(xiàn)了XUL,XAML,XSWT,XwingML等用來(lái)描述GUI的聲明性語(yǔ)言。不過(guò)GUI不應(yīng)該是死的,它還要和用戶交互。通常這種對(duì)用戶的反應(yīng)很難用聲明性的方式表達(dá),因?yàn)檫@是運(yùn)行時(shí)的,它由運(yùn)行時(shí)的情況決定。所以很多技術(shù)都考慮如何在這些聲明性的語(yǔ)言中加入過(guò)程化的表達(dá)。例如,HTML+XXXScript,但是我覺(jué)得這種混合方式很混亂不利于維護(hù),在加上HTML的表達(dá)力有限,所以web的交互很糟糕。XwingML可能很多人不熟悉,它是用來(lái)描述Swing的,現(xiàn)在已經(jīng)很難找到了。在XwingML中可以將Listener 寫(xiě)入在XwingML以XML定義的聲明性語(yǔ)言中,在GUI組件構(gòu)建起來(lái)時(shí),Listener對(duì)象也會(huì)被構(gòu)建起來(lái)并注冊(cè)到相應(yīng)的GUI組件上。當(dāng)然這件事情是由支撐該聲明性語(yǔ)言的XwingML引擎來(lái)做。相對(duì)于HTML+XXXScript它更加模塊化。不過(guò)我覺(jué)得它還是沒(méi)有達(dá)到GUI上聲明性與過(guò)程性的較好結(jié)合。
其實(shí)我很希望哪位高手能關(guān)于這個(gè)主題給出一些指點(diǎn),希望不吝賜教。