資料來源架構模式之活動記錄

2021-06-23 02:03:09 字數 1950 閱讀 4999

活動記錄(active record):乙個物件,它包裝資料庫表或檢視中某一行,封裝資料庫訪問,並在這些資料上增加了領域邏輯。

物件既有資料又有行為。活動記錄使用直截了當的方法,把資料訪問邏輯置於領域物件中。

二、實現簡單活動記錄

活動記錄在php許多框架中都有應用,如cakephp。

php**  

<?php   

/*** 行資料入口類

*/class ordergateway   

public

function getname()   

public

function setname($name)   

public

function getid()   

public

function setid($id)   

/*** 入口類自身擁有更新操作

*/public

function update()   

$sql = substr($sql, 0, -1);  

$sql .= " where id = " . $this->_id;  

return db::query($sql);  

}  /**

* 入口類自身擁有插入操作

*/public

function insert()   

public

static

function load($rs)   

}  /**

* 上面內容與行資料入口一樣

* 此類為領域邏輯,這裡新建個類,不採用static

*/class orderaccess   

public

function insert($data)  

public

function updatename($id,$name)   

public

function findall()   

}  return

$result;  

}  }  

class db   

}  /**

* 客戶端呼叫

*/class client   

}  client::main();  

?>  

三、執行機制

●活動記錄的本質是乙個領域模型,每條活動記錄負責向資料庫儲存資料,從資料庫載入資料以及處理作用於資料之上的領域邏輯。

●此模式沒有隱藏關聯式資料庫的存在這個事實,因此通常使用此模式的同時幾乎不用其他物件關係對映模式。

●活動記錄和行資料入口十分相似,之前也多次提及。行資料入口僅有資料庫訪問而活動記錄既有資料來源邏輯又有領域邏輯。

●由於活動記錄和資料庫間的緊耦合,在這個模式中常用靜態查詢方法(例子採用的是新建類,這樣更便於測試)。

●活動記錄通常具有如下方法:

1、由sql結果集中的一行構造乙個活動記錄例項(例中的

orderaccess->find方法

2、為將來對錶的插入構造乙個新的例項

3、用靜態查詢方法來包裝常用的sql查詢和返回活動記錄(例子採用新建類)

4、更新資料庫並將活動記錄中的資料插入資料庫(例中的

orderaccess->update方法

)5、獲取和設定域(例中的

ordergateway getname setname方法)

6、實現部分業務邏輯

四、使用場景

1、領域模型

活動記錄適用於不太複雜的領域邏輯,如crrd等。僅當活動記錄物件和資料庫中表直接對應,才比較有效。如果業務邏輯複雜,就會想到使用物件的直接關係、集合和繼承等。它們都難以對映到活動記錄。

2、事務指令碼

活動記錄可以減少事務指令碼**重複的痛苦。

3、表模組(不考慮)

資料來源架構模式之活動記錄

活動記錄 active record 乙個物件,它包裝資料庫表或檢視中某一行,封裝資料庫訪問,並在這些資料上增加了領域邏輯。物件既有資料又有行為。活動記錄使用直截了當的方法,把資料訪問邏輯置於領域物件中。二 實現簡單活動記錄 活動記錄在php許多框架中都有應用,如cakephp。行資料入口類 cla...

企業應用架構模式之物件 關係結構模式

前面已經介紹了物件 關係行為模式,包括工作單元 標識對映 延遲載入,這些都是協調記憶體物件與關聯式資料庫之間行為操作的一些方法。記憶體物件與關聯式資料庫除了行為需要協調之外,在結構上也需要一些方法來保證彼此的完整,這就是物件 關係結構模式。這些方法主要有 標識域 外來鍵對映 關聯表對映 依賴對映 嵌...

Mybatis資料來源 工廠模式

mybatis在資料來源物件管理策略上使用了工廠模式,即乙個型別的物件由特定的工廠類來提供 在解析配置檔案資料來源配置流程中 以上 獲得了 transactionfactory和 datasourcefactory物件,datasource物件由datasourcefactory構建而來 datas...