|
MVC是一個設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開。使用MVC應(yīng)用程序被分成三個核心部件:模型(M)、視圖(V)、控制器(C),它們各自處理自己的任務(wù)。
視圖 :視圖是用戶看到并與之交互的界面。對老式的Web應(yīng)用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應(yīng)用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術(shù)已層出不窮,它們包括Adobe Flash和象XHTML,XML/XSL,WML等一些標(biāo)識語言和Web services。如何處理應(yīng)用程序的界面變得越來越有挑戰(zhàn)性。MVC一個大的好處是它能為你的應(yīng)用程序處理很多不同的視圖。在視圖中其實(shí)沒有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機(jī)存儲的還是一個雇員列表,作為視圖來講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。
模型 :模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個部件中,模型擁有最多的處理任務(wù)。例如它可能用象EJBs和ColdFusion Components這樣的構(gòu)件對象來處理數(shù)據(jù)庫。被模型返回的數(shù)據(jù)是中立的,就是說模型與數(shù)據(jù)格式無關(guān),這樣一個模型能為多個視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復(fù)性。
控制器 :控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。所以當(dāng)單擊Web頁面中的超鏈接和發(fā)送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調(diào)用哪個模型構(gòu)件去處理請求,然后確定用哪個視圖來顯示模型處理返回的數(shù)據(jù)。
現(xiàn)在我們總結(jié)MVC的處理過程,首先控制器接收用戶的請求,并決定應(yīng)該調(diào)用哪個模型來進(jìn)行處理,然后模型用業(yè)務(wù)邏輯來處理用戶的請求并返回數(shù)據(jù),最后控制器用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過表示層呈現(xiàn)給用戶。
面向?qū)ο缶幊蹋?STRONG>Object Oriented Programming,OOP,面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)。OOP 的一條基本原則是計(jì)算機(jī)程序是由單個能夠起到子程序作用的單元或?qū)ο蠼M合而成。OOP 達(dá)到了軟件工程的三個主要目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個對象都能夠接收信息、處理數(shù)據(jù)和向其它對象發(fā)送信息。OOP 主要有以下的概念和組件:
組件 - 數(shù)據(jù)和功能一起在運(yùn)行著的計(jì)算機(jī)程序中形成的單元,組件在 OOP 計(jì)算機(jī)程序中是模塊和結(jié)構(gòu)化的基礎(chǔ)。
抽象性 - 程序有能力忽略正在處理中信息的某些方面,即對信息主要方面關(guān)注的能力。
封裝 - 也叫做信息封裝:確保組件不會以不可預(yù)期的方式改變其它組件的內(nèi)部狀態(tài);只有在那些提供了內(nèi)部狀態(tài)改變方法的組件中,才可以訪問其內(nèi)部狀態(tài)。每類組件都提供了一個與其它組件聯(lián)系的接口,并規(guī)定了其它組件進(jìn)行調(diào)用的方法。
多態(tài)性 - 組件的引用和類集會涉及到其它許多不同類型的組件,而且引用組件所產(chǎn)生的結(jié)果得依據(jù)實(shí)際調(diào)用的類型。
繼承性 - 允許在現(xiàn)存的組件基礎(chǔ)上創(chuàng)建子類組件,這統(tǒng)一并增強(qiáng)了多態(tài)性和封裝性。典型地來說就是用類來對組件進(jìn)行分組,而且還可以定義新類為現(xiàn)存的類的擴(kuò)展,這樣就可以將類組織成樹形或網(wǎng)狀結(jié)構(gòu),這體現(xiàn)了動作的通用性。
由于抽象性、封裝性、重用性以及便于使用等方面的原因,以組件為基礎(chǔ)的編程在腳本語言中已經(jīng)變得特別流行。
對象-關(guān)系映射(Object/Relation Mapping,簡稱ORM),是隨著面向?qū)ο蟮能浖_發(fā)方法發(fā)展而產(chǎn)生的。面向?qū)ο蟮拈_發(fā)方法是當(dāng)今企業(yè)級應(yīng)用開發(fā)環(huán)境中的主流開發(fā)方法,關(guān)系數(shù)據(jù)庫是企業(yè)級應(yīng)用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲系統(tǒng)。對象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)體的兩種表現(xiàn)形式,業(yè)務(wù)實(shí)體在內(nèi)存中表現(xiàn)為對象,在數(shù)據(jù)庫中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對象之間存在關(guān)聯(lián)和繼承關(guān)系,而在數(shù)據(jù)庫中,關(guān)系數(shù)據(jù)無法直接表達(dá)多對多關(guān)聯(lián)和繼承關(guān)系。因此,對象-關(guān)系映射(ORM)系統(tǒng)一般以中間件的形式存在,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫數(shù)據(jù)的映射。
面向?qū)ο笫菑能浖こ袒驹瓌t(如耦合、聚合、封裝)的基礎(chǔ)上發(fā)展起來的,而關(guān)系數(shù)據(jù)庫則是從數(shù)學(xué)理論發(fā)展而來的,兩套理論存在顯著的區(qū)別。為了解決這個不匹配的現(xiàn)象,對象關(guān)系映射技術(shù)應(yīng)運(yùn)而生。
CURD是一個數(shù)據(jù)庫技術(shù)中的縮寫詞,一般的項(xiàng)目開發(fā)的各種參數(shù)的基本功能都是CURD。它代表創(chuàng)建(Create)、更新(Update)、讀取(Read)和刪除(Delete)操作。CURD 定義了用于處理數(shù)據(jù)的基本原子操作。之所以將CURD 提升到一個技術(shù)難題的高度是因?yàn)橥瓿梢粋€涉及在多個數(shù)據(jù)庫系統(tǒng)中進(jìn)行CURD操作的匯總相關(guān)的活動,其性能可能會隨數(shù)據(jù)關(guān)系的變化而有非常大的差異。
CURD在具體的應(yīng)用中并非一定使用create、update 、read和delete字樣的方法,但是他們完成的功能是一致的。例如,Thinkphp就是使用add、save、select和delete方法表示模型的CURD操作。
ActiveRecord也屬于ORM層,由Rails最早提出,遵循標(biāo)準(zhǔn)的ORM模型:表映射到記錄,記錄映射到對象,字段映射到對象屬性。配合遵循的命名和配置慣例,能夠很大程度的快速實(shí)現(xiàn)模型的操作,而且簡潔易懂。
ActiveRecord的主要思想是:
1. 每一個數(shù)據(jù)庫表對應(yīng)創(chuàng)建一個類,類的每一個對象實(shí)例對應(yīng)于數(shù)據(jù)庫中表的一行記錄;通常表的每個字段在類中都有相應(yīng)的Field;
2. ActiveRecord同時負(fù)責(zé)把自己持久化,在ActiveRecord中封裝了對數(shù)據(jù)庫的訪問,即CURD;;
3. ActiveRecord是一種領(lǐng)域模型(Domain Model),封裝了部分業(yè)務(wù)邏輯;
ActiveRecord比較適用于:
1. 業(yè)務(wù)邏輯比較簡單,當(dāng)你的類基本上和數(shù)據(jù)庫中的表一一對應(yīng)時, ActiveRecord是非常方便的,即你的業(yè)務(wù)邏輯大多數(shù)是對單表操作;
2. 當(dāng)發(fā)生跨表的操作時, 往往會配合使用事務(wù)腳本(Transaction Script),把跨表事務(wù)提升到事務(wù)腳本中;
3. ActiveRecord最大優(yōu)點(diǎn)是簡單, 直觀。 一個類就包括了數(shù)據(jù)訪問和業(yè)務(wù)邏輯. 如果配合代碼生成器使用就更方便了;
這些優(yōu)點(diǎn)使ActiveRecord特別適合WEB快速開發(fā)。
單一入口通常是指一個項(xiàng)目或者應(yīng)用具有一個統(tǒng)一(但并不一定是唯一)的入口文件,也就是說項(xiàng)目的所有功能操作都是通過這個入口文件進(jìn)行的,并且往往入口文件是第一步被執(zhí)行的。
單一入口的好處是項(xiàng)目整體比較規(guī)范,因?yàn)橥粋€入口,往往其不同操作之間具有相同的規(guī)則。另外一個方面就是單一入口帶來的好處是控制較為靈活,因?yàn)閿r截方便了,類似如一些權(quán)限控制、用戶登錄方面的判斷和操作可以統(tǒng)一處理了。
或者有些人會擔(dān)心所有網(wǎng)站都通過一個入口文件進(jìn)行訪問,是否會造成太大的壓力,其實(shí)這是杞人憂天的想法。
php技術(shù):深入理解:單一入口、MVC、ORM、CURD、ActiveRecord概念,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。