免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版
打開APP
未登錄
開通VIP,暢享免費電子書等14項超值服
開通VIP
首頁
好書
留言交流
下載APP
聯(lián)系客服
什么是ActiveRecord
燮羽
>《Ruby》
2011.04.22
關(guān)注
我在
前一篇文章中
提到ActiveRecord, 有人在回復中問什么是ActiveRecord. 說實話,從去年開始用SubSonic, 我就一直有點困惑, 什么是ActiveRecord, 什么不是ActiveRecord, 以及應該怎么樣使用它才對. 把我的一些想法寫下來, 希望能和大家交流.
歡迎拍磚
.
ActiveRecord
是什么:
1. 每一個數(shù)據(jù)庫表對應創(chuàng)建一個類.類的每一個對象實例對應于數(shù)據(jù)庫中表的一行記錄; 通常表的每個字段在類中都有相應的Field;
2. ActiveRecord同時負責把自己持久化. 在ActiveRecord中封裝了對數(shù)據(jù)庫的訪問, 即CRUD;
3. ActiveRecord是一種領(lǐng)域模型(Domain Model), 封裝了部分業(yè)務邏輯;
ActiveRecord
不是什么:
1.
Row Data Gateway
Row Data Gateway模式中每個對象也封裝了數(shù)據(jù)庫記錄的狀態(tài)和持久化到數(shù)據(jù)庫的訪問方法; 這兩個有時候很難區(qū)分. 細微的區(qū)別在于Row Data Gateway不封裝任何業(yè)務邏輯;
2. TableGateway
TableGateway是一種數(shù)據(jù)訪問模式, 對每個表有一個類, 類的方法封裝了對單個表的數(shù)據(jù)操作, 如CRUD; 方法的接受表字段的值作為參數(shù);
比如說對表Person有DAOPerson, 有以下方法:
int Create(string name, bool isMale)
DataSet Find(int personId)
void Delete(int personId)
void Update(int personId, string name, bool isMale)
微軟的很多代碼示例中使用了此模式;
ActiveRecord的區(qū)別在于ActiveRecord的對象中保持了記錄的值, 是有狀態(tài)的, 而TableGateway是沒有狀態(tài)的, 只是一系列數(shù)據(jù)庫訪問方法的集合;
3. Table Module
Table Module是一種領(lǐng)域邏輯模式, 一個類對應于數(shù)據(jù)庫中的一個表; Table Module通常和Table Gateway合作, 前者負責基本的業(yè)務邏輯, 后者負責數(shù)據(jù)庫訪問, 以達到邏輯層和持久化層的隔離; 微軟的實例代碼經(jīng)常使用這兩者, 如對表Person, 通常會定義兩個類, PersonBL和PersonDB, 在PersonBL中處理驗證等邏輯, 并調(diào)用PersonDB訪問數(shù)據(jù)庫, 層間調(diào)用使用DataSet或自定義數(shù)據(jù)傳輸對象傳輸數(shù)據(jù)
在業(yè)務邏輯比較簡單并且有和表的一一對應時, ActiveRecord相對來說更簡單, 因為它在一個類中包括了業(yè)務邏輯對象和數(shù)據(jù)訪問, 而且不需要數(shù)據(jù)傳輸對象, 減少了維護的工作量;
和Table Module比較起來, ActiveRecord與數(shù)據(jù)庫耦合更緊;
ActiveRecord
適用于:
1. 業(yè)務邏輯比較簡單;當你的類基本上和數(shù)據(jù)庫中的表一一對應時, ActiveRecord是非常方便的, 即你的業(yè)務邏輯大多數(shù)是對單表操作;
2. 當發(fā)生跨表的操作時, 往往會配合使用事務腳本(Transaction Script), 把跨表事務提升到事務腳本中;
3. ActiveRecord最大優(yōu)點是簡單, 直觀; 一個類就包括了數(shù)據(jù)訪問和業(yè)務邏輯. 如果配合代碼生成器使用就更方便了;
4. 這些優(yōu)點使ActiveRecord特別適合web快速開發(fā), 而正是快速開發(fā)框架ROR采用了ActiveRecord, 并且很多類ROR框架如Castle的紛紛效仿才使ActiveRecord重新進入大家視線;
我想這也是為什么Martin Fowler在PoEAA中早就提出了這個模式, 但是直到最近兩三年ActiveRecord才熱起來可能就是這個原因;
ActiveRecord
不適合于
1. ActiveRecord雖然有業(yè)務邏輯, 但基本上都是基于單表的. 跨表邏輯一般會放到當發(fā)生跨表的操作時, 往往會配合使用事務腳本(Transaction Script)中. 如果對象間的關(guān)聯(lián)越來越多, 你的事務腳本越來越龐大, 重復的代碼越來越多, 你就要考慮Domain Model + O/R Mapper了;
2. ActiveRecord保存了數(shù)據(jù), 使它有時候看上去像數(shù)據(jù)傳輸對象(DTO). 但是ActiveRecord有數(shù)據(jù)庫訪問能力, 不要把它當DTO用. 尤其在跨越進程邊界調(diào)用的時候, 不能傳遞ActiveRecord對象;
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報
。
打開APP,閱讀全文并永久保存
查看更多類似文章
猜你喜歡
類似文章
企業(yè)應用架構(gòu)模式之領(lǐng)域邏輯模式
mybatis優(yōu)秀的設(shè)計總結(jié)
系統(tǒng)架構(gòu)師
架構(gòu)師如何應對復雜業(yè)務場景?領(lǐng)域建模的實戰(zhàn)案例解析
架構(gòu)設(shè)計:業(yè)務邏輯層簡述
J2EE設(shè)計決策
更多類似文章 >>
生活服務
首頁
萬象
文化
人生
生活
健康
教育
職場
理財
娛樂
藝術(shù)
上網(wǎng)
留言交流
回頂部
聯(lián)系我們
分享
收藏
點擊這里,查看已保存的文章
導長圖
關(guān)注
一鍵復制
下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!
聯(lián)系客服
微信登錄中...
請勿關(guān)閉此頁面
先別劃走!
送你5元優(yōu)惠券,購買VIP限時立減!
5
元
優(yōu)惠券
優(yōu)惠券還有
10:00
過期
馬上使用
×