天天看點

ActiveRecord 模型

ActiveRecord是什麼:

1. 每一個資料庫表對應建立一個類.類的每一個對象執行個體對應于資料庫中表的一行記錄; 通常表的每個字段在類中都有相應的Field;

2. ActiveRecord同時負責把自己持久化. 在ActiveRecord中封裝了對資料庫的通路, 即CRUD;

3. ActiveRecord是一種領域模型(Domain Model), 封裝了部分業務邏輯;

ActiveRecord與資料庫耦合更緊;

定義:

1、Active Record pattern實作,它是指一個既包含資料又包含行為的對象,這些資料需要持久儲存到對應的資料表中。Active Record一個很明顯的特征是:将資料通路邏輯也包含在這個domain對象中,通過這種辦法讓人們可以知道如何從資料庫讀寫資料。也就是将Dao中對資料庫的CRUD方法和Domain Object整合在一起

ActiveRecord适用于:

1. 業務邏輯比較簡單;當你的類基本上和資料庫中的表一一對應時, ActiveRecord是非常友善的, 即你的業務邏輯大多數是對單表操作;

2. 當發生跨表的操作時, 往往會配合使用事務腳本(Transaction Script), 把跨表事務提升到事務腳本中;

3. ActiveRecord最大優點是簡單, 直覺; 一個類就包括了資料通路和業務邏輯. 如果配合代碼生成器使用就更友善了;

4. 這些優點使ActiveRecord特别适合web快速開發, 而正是快速開發架構ROR采用了ActiveRecord, 并且很多類ROR架構如Castle的紛紛效仿才使ActiveRecord重新進入大家視線;

我想這也是為什麼Martin Fowler在PoEAA中早就提出了這個模式, 但是直到最近兩三年ActiveRecord才熱起來可能就是這個原因;

ActiveRecord不适合于

1. ActiveRecord雖然有業務邏輯, 但基本上都是基于單表的. 跨表邏輯一般會放到當發生跨表的操作時, 往往會配合使用事務腳本(Transaction Script)中. 如果對象間的關聯越來越多, 你的事務腳本越來越龐大, 重複的代碼越來越多, 你就要考慮Domain Model + O/R Mapper了;

2. ActiveRecord儲存了資料, 使它有時候看上去像資料傳輸對象(DTO). 但是ActiveRecord有資料庫通路能力, 不要把它當DTO用. 尤其在跨越程序邊界調用的時候, 不能傳遞ActiveRecord對象;

這個模式的技術架構:

UI(Form/Web網頁):資料展示, 有控件, 或者完全的HTML标簽, Jsp中還有EL

Datasource:資料提供者,提供給頁面控件(元素)展示資料, Net有 SQLDatasource,ObjectDatasource

    Java有 JSP 對應的<jsp:bean>, <jsp:setProperty>, <jsp:getProperty> 等标簽

    Zen架構中 QuerySource

BO:業務邏輯層, 實作:業務邏輯與算法,Entity類業務邏輯方法,資料驗證, 生成DTO層對象等功能,

業務邏輯與Datasource之間的DTO層, 用來傳輸資料,這些資料可能是表、視圖或者綜合的一個POJO,對于簡單資料可以與Entity共用一個類。

Entity層: 類與資料庫之間的映射層, 對應的關系型資料庫, 儲存資料時轉換成SQL語句, 對應Cache資料庫使用它自己的代理方法

ActiveRecord: 技術架構層, 所有的Entity都繼承此層的基類;本基類中包含了資料操作方法,封裝了部分業務邏輯

    對應的産品: Net Castle的 ActiveRecord架構, Cache資料庫的Persistent類的資料存儲架構,

繼續閱讀