免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
什么是ActiveRecord
我在 前一篇文章中提到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è)計決策
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服