2009年10月15日 星期四

Model-View-Controller 及 Continuation

PLT Scheme Web Server 是一種 Continuation based Web Server。HTTP 的 stateless 特性使得某類網路應用程式難以撰寫。而 Continuation 可以解決這類的問題。

但是初次接觸 Continuation based Web Server 的我對這種程式的寫法不無疑問。在當初以 javascript 及 Helma NG 撰寫我的遊戲軟體時,我採用的是 page oriented 的撰寫方式,這樣的撰寫方式很自然地和 Model-View-Controller 的理念對應。但是當我以 Continuation 來撰寫時,還摸索不出如何做到 Model-View-Controller 的方法。

以我游戲中的一個場景為例。這場景秀出一段文字,之後給玩家三個選項,玩家點了選項後會跑到另一個場景,因此網頁上和這選項對應的連結必須指出將要到哪一個場景。如果使用 Continuation,產生 html 的 function (View) 必須知道這連結要執行哪一個 function (Controller),以產生那個 function 的 continutaion。但這使得 View 必須知道 Controller。再者,如果那個被連結的 function 會使用到產生 html 的 function 的 local 資料或引數,則那被連結的 function 還必須在產生 html 的 function 的 local 中定義。結果 View 和 Controller 無法分開放在兩個不同的 modules。

在 GUI 還不盛行的時代,撰寫交談式程式的概念十分簡單,就是先印出問題等待使用者回答,使用者回答後再根據使用者的回答進行處理。GUI 的複雜度使得我們必須使用 MVC 這樣的概念。程式流程的控制權轉到了使用者的手裡。但至少 VIEW 和 Controller 都還在同一台電腦上,資料得以互通。到了網路時代,WEB 程式的撰寫更為困難,因為人機界面落在另一台電腦,在伺服端的程式並不知道使用者正在觀看哪一個畫面。當使用者下命令時,伺服端程式只能從 request 來猜出使用者的要求,沒有 continuation 的設計時,request 內只有這次要求的資料,看不出過去要求的歷史,無法處理複雜的,必須依據使用者過去瀏覽的歷史處理的運算。

這樣說來,如果 Continuation 能把事情簡化到最早期的程式撰寫方法,則 MVC 的概念並不是一定必要的。

沒有留言:

張貼留言