[轉(zhuǎn)]淺談model, orm, dao和active record的區(qū)別

淺談model, orm, dao和active record的區(qū)別

在做web開發(fā)中观游,經(jīng)常會(huì)碰到和數(shù)據(jù)相關(guān)的幾個(gè)概念:

  • Model
  • DAO,data access object卵贱,數(shù)據(jù)訪問對(duì)象
  • ORM滥沫,object-relational mapping,對(duì)象關(guān)系映射
  • Active Record
一键俱、Model兰绣,模型。

模型是MVC中的概念编振,指的是數(shù)據(jù)和改變數(shù)據(jù)的操作(業(yè)務(wù)邏輯)缀辩。模型通常指代現(xiàn)實(shí)生活中的某樣實(shí)體。以訂單為例踪央,每個(gè)訂單都包含許多數(shù)據(jù)臀玄,如客戶、價(jià)格杯瞻、明細(xì)等等镐牺,這些數(shù)據(jù)都叫做訂單這個(gè)模型的屬性,此外魁莉,和訂單相關(guān)的一些列操作,比如當(dāng)購(gòu)買時(shí),你可能需要先檢查庫(kù)存旗唁,給與一定的優(yōu)惠畦浓,再更新賬戶余額和積分等等,這些就叫做業(yè)務(wù)邏輯检疫,也是模型的一部分讶请,從代碼上來講,是要放在模型中的屎媳。

二夺溢、DAO:data access object,數(shù)據(jù)訪問對(duì)象

當(dāng)模型執(zhí)行完業(yè)務(wù)邏輯后烛谊,我們便要把模型中的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中风响。如果我們直接把和數(shù)據(jù)庫(kù)相關(guān)的代碼放在模型里,會(huì)使得以后的維護(hù)相當(dāng)?shù)穆闊┑べ鳌T谖抑暗囊粋€(gè)項(xiàng)目中状勤,我們用戶的增長(zhǎng)相當(dāng)快,導(dǎo)致一臺(tái)數(shù)據(jù)庫(kù)無法支撐所有的訪問双泪,不得不使用分庫(kù)來解決問題持搜。然而前人把SQL語句直接寫在了模型這一層里,這導(dǎo)致分庫(kù)相當(dāng)?shù)穆闊┍好覀冎荒芟?strong>把這些SQL語句抽出來葫盼,才能把分庫(kù)進(jìn)行下去。我們把這些抽出來的SQL代碼放到單獨(dú)的一層村斟,這一層便是DAL剪返,Data Access Layer,數(shù)據(jù)訪問層邓梅,它由許多DAO組成脱盲,目的便是把和數(shù)據(jù)庫(kù)相關(guān)的代碼封裝起來,這樣當(dāng)我們執(zhí)行分庫(kù)時(shí)日缨,便只用調(diào)整DAO的代碼了钱反,模型根本不用關(guān)心它使用的數(shù)據(jù)是放在A庫(kù)還是B庫(kù)。
  DAO其實(shí)是來源于J2EE的一個(gè)設(shè)計(jì)模式匣距,當(dāng)初的目的也是使得企業(yè)更換數(shù)據(jù)庫(kù)時(shí)面哥,不用影響模型層的代碼。

三毅待、ORM尚卫,object-relational mapping

與DAO類似,ORM也是一種封裝數(shù)據(jù)訪問的概念尸红。然而ORM不像DAO只是一種軟件設(shè)計(jì)的指導(dǎo)原則吱涉,強(qiáng)調(diào)的是系統(tǒng)應(yīng)該層次分明刹泄。ORM更像是一種工具,有著成熟的產(chǎn)品怎爵,比如Java界非常有名的hibernate特石,以及很多PHP框架里自帶的ORM庫(kù)。他們的好處在于能將你程序中的數(shù)據(jù)對(duì)象自動(dòng)地轉(zhuǎn)化為關(guān)系型數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表和列鳖链,數(shù)據(jù)對(duì)象間的引用也可以通過這個(gè)工具轉(zhuǎn)化為表之間的join姆蘸,而Hibernate甚至提供一套他們自己的數(shù)據(jù)查詢語言HQL來解決復(fù)雜的查詢問題。
使用ORM的好處就是使得你的開發(fā)幾乎不用接觸到SQL語句芙委。創(chuàng)建一張表逞敷,聲明一個(gè)對(duì)應(yīng)的類,然后你就只用和這個(gè)類的實(shí)例進(jìn)行交互了灌侣,至于這個(gè)對(duì)象里的數(shù)據(jù)該怎么存儲(chǔ)又該怎么獲取推捐,通通不用關(guān)心。

四顶瞳、Active Record

Active Record則是隨著ruby on rails的流行而火起來的一種ORM模式玖姑,它是把負(fù)責(zé)持久化的代碼也集成到數(shù)據(jù)對(duì)象中,即這個(gè)數(shù)據(jù)對(duì)象知道怎樣把自己存到數(shù)據(jù)庫(kù)里慨菱。這與以往的ORM有不同焰络,傳統(tǒng)的ORM會(huì)把數(shù)據(jù)對(duì)象和負(fù)責(zé)持久化的代碼分開,數(shù)據(jù)對(duì)象只是一個(gè)單純包含數(shù)據(jù)的結(jié)構(gòu)體符喝,在模型層和ORM層中傳遞闪彼。而在Active Record中,模型層集成了ORM的功能协饲,他們既代表實(shí)體畏腕,包含業(yè)務(wù)邏輯,又是數(shù)據(jù)對(duì)象茉稠,并負(fù)責(zé)把自己存儲(chǔ)到數(shù)據(jù)庫(kù)中描馅,當(dāng)然,存儲(chǔ)的這一部分代碼是早已在模型的父類中實(shí)現(xiàn)好了的而线,屬于框架的一部分铭污,模型只需簡(jiǎn)單的調(diào)用父類的方法來完成持久化而已。

總結(jié):DAO層用來跟數(shù)據(jù)庫(kù)打交道膀篮。ORM是對(duì)象關(guān)系映射嘹狞,像比較常用的ORM框架有hibernate ,ibatis。就算是一個(gè)應(yīng)用中采用了ORM框架誓竿,也是需要DAO層的磅网。只不過采用ORM后,DAO是跟ORM框架打交道筷屡,再由ORM跟數(shù)據(jù)庫(kù)打交道涧偷;而沒有采用簸喂,就是DAO層直接訪問數(shù)據(jù)庫(kù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嫂丙,一起剝皮案震驚了整個(gè)濱河市娘赴,隨后出現(xiàn)的幾起案子规哲,更是在濱河造成了極大的恐慌跟啤,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唉锌,死亡現(xiàn)場(chǎng)離奇詭異隅肥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)袄简,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門腥放,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绿语,你說我怎么就攤上這事秃症。” “怎么了吕粹?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵种柑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我匹耕,道長(zhǎng)聚请,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任稳其,我火速辦了婚禮驶赏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘既鞠。我一直安慰自己煤傍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布嘱蛋。 她就那樣靜靜地躺著蚯姆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浑槽。 梳的紋絲不亂的頭發(fā)上蒋失,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音桐玻,去河邊找鬼篙挽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛镊靴,可吹牛的內(nèi)容都是我干的铣卡。 我是一名探鬼主播链韭,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼煮落!你這毒婦竟也來了敞峭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤蝉仇,失蹤者是張志新(化名)和其女友劉穎旋讹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轿衔,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沉迹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了害驹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞭呕。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宛官,靈堂內(nèi)的尸體忽然破棺而出葫松,到底是詐尸還是另有隱情,我是刑警寧澤底洗,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布腋么,位于F島的核電站,受9級(jí)特大地震影響枷恕,放射性物質(zhì)發(fā)生泄漏党晋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一徐块、第九天 我趴在偏房一處隱蔽的房頂上張望未玻。 院中可真熱鬧,春花似錦胡控、人聲如沸扳剿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庇绽。三九已至,卻和暖如春橙困,著一層夾襖步出監(jiān)牢的瞬間瞧掺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工凡傅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辟狈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像哼转,于是被迫代替她去往敵國(guó)和親明未。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 在做web開發(fā)中壹蔓,經(jīng)常會(huì)碰到這樣幾個(gè)概念: Model DAO趟妥,data access object,數(shù)據(jù)訪問對(duì)象...
    橙娃閱讀 1,472評(píng)論 0 1
  • Java分層概念(轉(zhuǎn)) 原文地址(也不屬于原文吧佣蓉,這也是別人轉(zhuǎn)載的不知道原作者是誰披摄,如有侵權(quán),請(qǐng)聯(lián)系偏螺,以刪除):h...
    小小世界R閱讀 1,631評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法行疏,類相關(guān)的語法匆光,內(nèi)部類的語法套像,繼承相關(guān)的語法,異常的語法终息,線程的語...
    子非魚_t_閱讀 31,603評(píng)論 18 399
  • 我是突然沒有了方向的夺巩,現(xiàn)在的我很忙,是事情很多的那種忙周崭,然而不是很充實(shí)的忙柳譬,難過的時(shí)候心還是寂寞的不行。我想去嘗試...
    弗瑞那閱讀 198評(píng)論 0 0
  • 今天看完了《圍城》续镇,說實(shí)話這是我第二次嘗試美澳,第一次看到方鴻漸在船上和鮑小姐曖昧不清就沒有細(xì)看下去了,一直拖...
    聆聽休閑曲閱讀 573評(píng)論 0 3