Posted on 2005-11-15 12:26
canonical 閱讀(238)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
設(shè)計(jì)理論
cocoon的文檔中有這樣一段話(huà):
Traditional Web
applications try to model the control flow of a Web application by
modeling the application as a finite state machine (FSM). In this
model, the Web application is composed of multiple states, but the
application can be only in one state at a time. Any request received by
the application transitions it into a different state. During such a
transition, the application may perform various side-effects, such as
updating objects either in memory or in a database. Another important
side-effect of such a transition is that a Web page is sent back to the
client browser.
Servlet模型提供的正是一個(gè)最基本的基于IO的FSM模型:應(yīng)用程序的狀態(tài)變量存儲(chǔ)在session中,應(yīng)用程序根據(jù)用戶(hù)請(qǐng)求更新session中
變量的值。這里一個(gè)隱含的假設(shè)是session中的變量是不相關(guān)的,因?yàn)閟ervlet模型中沒(méi)有提供任何機(jī)制來(lái)同時(shí)操縱一組相關(guān)變量,例如我們?cè)?
session中存放了三個(gè)變量name, title, data,
如果我們希望刪除這三個(gè)變量,我們必須通過(guò)三次獨(dú)立的函數(shù)調(diào)用來(lái)完成,servlet模型本身并不知道這三者之間的關(guān)聯(lián)關(guān)系。
當(dāng)web應(yīng)用程序逐漸變的復(fù)雜起來(lái),這個(gè)最簡(jiǎn)單的FSM模型就顯得力不從心了。因此發(fā)展出了MVC模型(Model-View-Controller),
這是對(duì)有限狀態(tài)機(jī)的一個(gè)精細(xì)化。首先我們識(shí)別出session,request中的變量之間存在相關(guān)性,而且變量之間的地位也是不平等的,某些變量的改變
將直接導(dǎo)致另外一些變量的改變。因此變量根據(jù)相關(guān)性被聚合起來(lái),構(gòu)成很多對(duì)象。應(yīng)用程序的狀態(tài)不再由一個(gè)個(gè)獨(dú)立的變量構(gòu)成,而是由具有更豐富語(yǔ)義的對(duì)象構(gòu)
成。在大的結(jié)構(gòu)方面,一些基本的對(duì)象被分離出來(lái),構(gòu)成一個(gè)核心,即model層, 而外圍的變量被分割在不同的view中。
在流行的struts和webwork等MVC框架中,變量的聚合都定義在action層,
各個(gè)相關(guān)的action并沒(méi)有匯聚成一個(gè)具有獨(dú)立意義的對(duì)象,似乎僅僅做到了model層和view層的分離,在model層內(nèi)部并沒(méi)有建立合適的模型,
即struts和webwork等建立的MVC模型中隱含假定整個(gè)model層內(nèi)部是沒(méi)有結(jié)構(gòu)的(注,我對(duì)struts和webwork的了解限于簡(jiǎn)單介
紹文檔,這里的說(shuō)法可能并不準(zhǔn)確)。一些更加精細(xì)的MVC架構(gòu)直接支持model層的分解,即model層由一系列不相關(guān)的對(duì)象構(gòu)成,每個(gè)對(duì)象具有從屬于
自己的action。沿著這個(gè)復(fù)雜性發(fā)展的級(jí)列繼續(xù)下去,我們可以知道,當(dāng)對(duì)象之間的交互變得更加復(fù)雜的時(shí)候,我們需要框架本身能夠直接支持model層
對(duì)象之間的相關(guān)性。最簡(jiǎn)單的控制關(guān)系是樹(shù)形結(jié)構(gòu),即父節(jié)點(diǎn)控制子節(jié)點(diǎn),父節(jié)點(diǎn)銷(xiāo)毀的時(shí)候子節(jié)點(diǎn)自動(dòng)銷(xiāo)毀。這樣就構(gòu)成所謂的HMVC
(Hierarchical
MVC)模型。在這個(gè)模型中,model層由一系列的對(duì)象組成,而且這些對(duì)象被分割到不同的package中,組成一個(gè)樹(shù)形結(jié)構(gòu).