posts - 176, comments - 240, trackbacks - 0, articles - 7

          [導入]從級列理論看MVC架構

          Posted on 2005-11-15 12:26 canonical 閱讀(239) 評論(0)  編輯  收藏 所屬分類: 設計理論

          cocoon的文檔中有這樣一段話:
          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模型提供的正是一個最基本的基于IO的FSM模型:應用程序的狀態變量存儲在session中,應用程序根據用戶請求更新session中 變量的值。這里一個隱含的假設是session中的變量是不相關的,因為servlet模型中沒有提供任何機制來同時操縱一組相關變量,例如我們在 session中存放了三個變量name, title, data, 如果我們希望刪除這三個變量,我們必須通過三次獨立的函數調用來完成,servlet模型本身并不知道這三者之間的關聯關系。
              當web應用程序逐漸變的復雜起來,這個最簡單的FSM模型就顯得力不從心了。因此發展出了MVC模型(Model-View-Controller), 這是對有限狀態機的一個精細化。首先我們識別出session,request中的變量之間存在相關性,而且變量之間的地位也是不平等的,某些變量的改變 將直接導致另外一些變量的改變。因此變量根據相關性被聚合起來,構成很多對象。應用程序的狀態不再由一個個獨立的變量構成,而是由具有更豐富語義的對象構 成。在大的結構方面,一些基本的對象被分離出來,構成一個核心,即model層, 而外圍的變量被分割在不同的view中。 在流行的struts和webwork等MVC框架中,變量的聚合都定義在action層, 各個相關的action并沒有匯聚成一個具有獨立意義的對象,似乎僅僅做到了model層和view層的分離,在model層內部并沒有建立合適的模型, 即struts和webwork等建立的MVC模型中隱含假定整個model層內部是沒有結構的(注,我對struts和webwork的了解限于簡單介 紹文檔,這里的說法可能并不準確)。一些更加精細的MVC架構直接支持model層的分解,即model層由一系列不相關的對象構成,每個對象具有從屬于 自己的action。沿著這個復雜性發展的級列繼續下去,我們可以知道,當對象之間的交互變得更加復雜的時候,我們需要框架本身能夠直接支持model層 對象之間的相關性。最簡單的控制關系是樹形結構,即父節點控制子節點,父節點銷毀的時候子節點自動銷毀。這樣就構成所謂的HMVC (Hierarchical MVC)模型。在這個模型中,model層由一系列的對象組成,而且這些對象被分割到不同的package中,組成一個樹形結構.
          主站蜘蛛池模板: 长春市| 德保县| 中卫市| 那曲县| 高州市| 台中县| 铜鼓县| 文昌市| 洛扎县| 湖北省| 琼结县| 海门市| 巴林右旗| 射阳县| 浪卡子县| 叙永县| 东宁县| 中山市| 荔波县| 财经| 寿光市| 个旧市| 巴里| 沈丘县| 峨山| 枣强县| 灵璧县| 宁乡县| 阳春市| 凤山县| 汉沽区| 时尚| 洛浦县| 大关县| 丹东市| 万全县| 建水县| 股票| 原阳县| 东海县| 邻水|