結(jié)構(gòu)(Structure)、表現(xiàn)(Presentation)、行為(Behavior),是Web開(kāi)發(fā)標(biāo)準(zhǔn)中的一個(gè)重要概念(以下簡(jiǎn)稱SPB)。而模型(Model)、視圖(View)、控制器(Controller)的MVC模式呢,是圖形界面應(yīng)用的重要模式之一,自然也廣泛的用在了Web應(yīng)用的開(kāi)發(fā)之中。
最近熱門起來(lái)的Ajax技術(shù),又刺激了人們對(duì)于MVC模式的更多思考。本文的很多觀點(diǎn)得到了jasonhsu的一篇論文《基于遞歸MVC結(jié)構(gòu)的Web應(yīng)用軟件分析模式》的啟發(fā),特此感謝。
現(xiàn)在我們要考慮技術(shù)范疇:SPB、MVC與Ajax之間的相互關(guān)系,或者說(shuō),在采用Ajax技術(shù)的Web應(yīng)用中,SPB與MVC之間,應(yīng)該是怎樣的一種關(guān)系。
左邊是一個(gè)標(biāo)準(zhǔn)的SPB模型,結(jié)構(gòu)通過(guò)CSS渲染之后,顯示給用戶。JavaScript可以通過(guò)DOM API以及DOM Event與結(jié)構(gòu)交互。
右邊則是我將JavaScript部分放大之后的情況。
大致上,我們寫(xiě)一個(gè)稍微復(fù)雜一些的Ajax應(yīng)用的時(shí)候,JavaScript部分,就應(yīng)該一分為三。一部分是用來(lái)做DOM與Style控制。另一部分則專心與Server打交道,通常就是用XMLHTTP了,然后將獲取的數(shù)據(jù),在瀏覽器中構(gòu)建一個(gè)Model層。再一部分就是表現(xiàn)層的業(yè)務(wù)邏輯,主要需要處理各種Event,做出正確的反饋。
這樣的三個(gè)部分,順理成章的,也就成了Browser中的MVC了。
寫(xiě)完這點(diǎn)東西之后,我再次看了一下jasonhsu的文章,以及Ajax in Action中的第四章《The page as an application》,發(fā)現(xiàn)我的思路似乎與Ajax in Action中的思路幾乎完全一致,而與jasonhsu的有所差別。
雖然人家已經(jīng)說(shuō)了,不過(guò)我畢竟是自己想通了這一層的,嘿嘿。