欧美日韩精品在线,国内精品久久久久久久久,一级毛片恃级毛片直播,清纯唯美亚洲综合欧美色

《PHP設(shè)計(jì)模式介紹》第十七章 MVC 模式_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:《PHP設(shè)計(jì)模式介紹》第十五章 表數(shù)據(jù)網(wǎng)關(guān)模式
前一章中使用動(dòng)態(tài)記錄模式對(duì)數(shù)據(jù)庫(kù)表進(jìn)行建立,獲取,更新(通過擴(kuò)展實(shí)現(xiàn)刪除)每一行的操作。動(dòng)態(tài)記錄模式是一種簡(jiǎn)單的抽象數(shù)據(jù)庫(kù)連接的方式,但是這種簡(jiǎn)潔性也正是它的弱點(diǎn)。動(dòng)態(tài)記錄類只處理

web應(yīng)用是十分多樣化的,為了實(shí)現(xiàn)某種應(yīng)用,那哪種或哪些是最好的呢?或者說,對(duì)于web應(yīng)用有沒有一種最好的體系?

問題

你能配置一個(gè)單一的web體系去滿足每個(gè)普通的web應(yīng)用嗎?包括一般性的界面呈現(xiàn)風(fēng)格,身份驗(yàn)證,表單數(shù)據(jù)確認(rèn)等等?

解決方案:

MVC模式把你的軟件組織架構(gòu)分解成3個(gè)清晰的任務(wù)

model結(jié)合了應(yīng)用數(shù)據(jù),應(yīng)用流程以及業(yè)務(wù)邏輯

view從model中提取數(shù)據(jù)并呈現(xiàn)出來

controller調(diào)用應(yīng)用流程,接收輸入并傳送給model和view

注:MVC的起源

MVC模式是1970年由trygve reenskaug在施樂公司的研究中心提出的。最早的參考例程代碼是用smalltalk80編寫的。它最初是用來解決應(yīng)用軟件中的用戶圖形界面的交互問題的。

你要使用了MVC模式,你就會(huì)知道它是多么的有用,尤其是對(duì)于圖形化的用戶界面應(yīng)用。除此之外,MVC對(duì)web應(yīng)用也非常有用,雖然web服務(wù)進(jìn)行通訊連接,與通訊過程有時(shí)會(huì)中斷,但這也帶來了一些獨(dú)特的挑戰(zhàn)和機(jī)會(huì)。

假如你到這一章來尋找一種真正的對(duì)于web應(yīng)用的MVC方法,我希望你不會(huì)對(duì)于這里的答案太失望。最完美的解決方案是不存在的,但是這里有很多實(shí)例以及相關(guān)的模式,幫助你有效的去實(shí)施MVC。有希望的是,這里的觀點(diǎn)能作為你的編碼工作的跳板,并且?guī)ьI(lǐng)你進(jìn)行更多的研究。

模塊視圖控制器

不像其他的設(shè)計(jì)模式,MVC模式不是一個(gè)注重于講述一種可以直接設(shè)計(jì)編碼的類結(jié)構(gòu)的模式。相反,它不僅僅是概念上的指導(dǎo)或范例。

在概念上,MVC模式的定義的是model,view以及controller三者之間的橋梁。controller以及view都依賴于model,因?yàn)関iew和controller都得向model發(fā)送數(shù)據(jù)請(qǐng)求。數(shù)據(jù)通過controller輸入到你的系統(tǒng)當(dāng)中,并最終通過view顯示出結(jié)果。對(duì)于你一個(gè)php開發(fā)者,更具體的來說,controller處理每一個(gè)外部的http請(qǐng)求,而view將產(chǎn)生http回應(yīng)。

下邊是MVC模式的定義圖

在理想的MVC環(huán)境中,通訊是直接的,如下面的序列圖。

當(dāng)然,具體到細(xì)節(jié)上就有些差異了。當(dāng)在web應(yīng)用里實(shí)施MVC時(shí),在單一的類中不會(huì)出現(xiàn)model,view以及controller,MVC把各組對(duì)象緊密地連接起來,每組對(duì)象實(shí)現(xiàn)一種特定的任務(wù)。controller可以由幾類組成,用來分析http請(qǐng)求,以確定應(yīng)用程序所要進(jìn)行的處理動(dòng)作。model一般是由很多類組成。web應(yīng)用里的view通常是一種摸版體系,可以由一些對(duì)象組成。

在接下來的幾節(jié),讓我們深入挖掘“MVC三和音”的每個(gè)部分,了解哪些設(shè)計(jì)模式存在于或推動(dòng)每個(gè)部分,以及他們?nèi)绾螏椭氵M(jìn)行編碼工作。

Model

model包含你的應(yīng)用邏輯以及應(yīng)用數(shù)據(jù),它可能是你的應(yīng)用中最主要的邏輯處理部分。model沒有任何關(guān)于界面風(fēng)格的表達(dá),對(duì)于處理http請(qǐng)求也沒有起什么作用。

Domain Model

域model是對(duì)象的一層,它將應(yīng)用程序處理的問題、數(shù)據(jù)以及業(yè)務(wù)邏輯抽象化。域model可以歸為兩大類:簡(jiǎn)單域model以及富域model

簡(jiǎn)單域model在業(yè)務(wù)對(duì)象與數(shù)據(jù)庫(kù)表單間產(chǎn)生一對(duì)一的響應(yīng)。你已經(jīng)見過一些模式--active record,table data gateway,以及datamapper,所有數(shù)據(jù)庫(kù)相關(guān)的設(shè)計(jì)模式,他們可以幫助你將數(shù)據(jù)庫(kù)相關(guān)的邏輯組織成一個(gè)域model(為了使本書中的例子合理,簡(jiǎn)潔易懂,選取的材料都沒有超過簡(jiǎn)單域model的一對(duì)一響應(yīng)的范圍---同形映射)

一個(gè)富域model包括由一堆緊緊交織在一起的對(duì)象構(gòu)成的復(fù)雜的web,這些對(duì)象使用了繼承機(jī)制,本書以及gof當(dāng)中的很多設(shè)計(jì)模式都覆蓋了這些內(nèi)容。富域model更容易被測(cè)試以及反復(fù)重構(gòu),外加緊密地和商業(yè)需求結(jié)合在一起。

采用哪種域model就要看你的應(yīng)用程序的上下文了。如果你只是傳送一個(gè)相當(dāng)簡(jiǎn)單的表單處理web應(yīng)用,就沒有必要建立富域model了。但是,如果你要編寫一個(gè)庫(kù),那是一個(gè)數(shù)百萬美元市值的公司的內(nèi)部網(wǎng)的底層結(jié)構(gòu),那就需要建立一個(gè)富域model了,它提供了一個(gè)精確的表述業(yè)務(wù)處理以及迅速的數(shù)據(jù)計(jì)算的平臺(tái)。

martin fowler致力于開發(fā)富域model,簡(jiǎn)要的覆蓋了poeaa中的域模型的類型以及在eric evans的書中的域驅(qū)動(dòng)設(shè)計(jì)

View

view主要處理所有界面呈現(xiàn)的問題。view從model里提取數(shù)據(jù),把它格式化成html頁面或者xml頁面服務(wù),又或者用于email的文本。

鑒定你是否把你的代碼分離成明確定義了的任務(wù)的一個(gè)好方法就是:嘗試代替(至少在概念上)另一個(gè)wiew,這個(gè)view產(chǎn)生完全不同的輸出。舉個(gè)例子,如果你有一個(gè)web應(yīng)用,為了迅速的使你的web程序在php的命令行模式下運(yùn)行,你要改動(dòng)什么呢?

直接通過View中的表單調(diào)用Model中的方法去修改數(shù)據(jù)是不合適的,數(shù)據(jù)的更新修改方法只能借助Controller來調(diào)用。View只能以數(shù)據(jù)的只讀方式調(diào)用Model中的方法,不能對(duì)數(shù)據(jù)進(jìn)行修改。一般情況下有兩種View設(shè)計(jì)模式:Template View和Transform View。

Template View

用于web 應(yīng)用的view中使用的主要模式就是Template View,這個(gè)模式使用一個(gè)模版文件(通常是html),它包括了一些特殊標(biāo)記,當(dāng)Template View被執(zhí)行時(shí),這些特殊標(biāo)記就被model里的對(duì)應(yīng)數(shù)據(jù)替換并顯示出來。

php 本身就是一種特定類型的實(shí)例模版,叫做服務(wù)器頁。一個(gè)模版系統(tǒng)是基于使用php作為模版的,它本身是savant(http://www.phpsavant.com/)

分享:《PHP設(shè)計(jì)模式介紹》第十四章 動(dòng)態(tài)記錄模式
到目前為止,您所看到的這些設(shè)計(jì)模式大大提高了代碼的可讀性與可維護(hù)性。然而,在WEB應(yīng)用設(shè)計(jì)與開發(fā)中一個(gè)基本的需求與挑戰(zhàn):數(shù)據(jù)庫(kù)應(yīng)用,這些設(shè)計(jì)模式都沒有涉及到。本章與接下來的兩章—

共4頁上一頁1234下一頁
來源:模板無憂//所屬分類:PHP教程/更新時(shí)間:2008-08-22
相關(guān)PHP教程