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