【活動記錄的意圖】
一個對象,它包裝數據表或視圖中某一行,封裝數據庫訪問,並在這些數據上增加了領域邏輯。
【活動記錄的適用場景】
適用於不太復雜的領域邏輯,如CRUD操作等。
【活動記錄的運行機制】
對象既有數據又有行為。其使用最直接的方法,將數據訪問邏輯置於領域對象中。
活動記錄的本質是一個領域模型,這個領域模型中的類和基數據庫中的記錄結構應該完全匹配,類的每個域對應表的每一列。
一般來說,活動記錄包括如下一些方法:
1、由數據行構造一個活動記錄實例;
2、為將來對表的插入構造一個新的實例;
3、用靜態查找方法來包裝常用的SQL查詢和返回活動記錄;
4、更新數據庫並將活動記錄中的數據插入數據庫;
5、獲取或設置域;
6、實現部分業務邏輯。
【活動記錄的優點和缺點】
優點:
1、簡單,容易創建並且容易理解。
2、在使用事務腳本時,減少代碼復制。
3、可以在改變數據庫結構時不改變領域邏輯。
4、基於單個活動記錄的派生和測試驗證會很有效。
缺點:
1、沒有隱藏關系數據庫的存在。
2、僅當活動記錄對象和數據庫中表直接對應時,活動記錄才會有效。
3、要求對象的設計和數據庫的設計緊耦合,這使得項目中的進一步重構很困難
【活動記錄與其它模式】
數據源架構模式之行數據入口:活動記錄與行數據入口十分類似。二者的主要差別是行數據入口 僅有數據庫訪問而活動記錄既有數據源邏輯又有領域邏輯。
【活動記錄的PHP示例】
- <?php
- /**
- * 企業應用架構 數據源架構模式之活動記錄 2010-10-17 sz
- * @author phppan.p#gmail.com http://www.phppan.com
- * 哥學社成員(http://www.blog-brother.com/)
- * @package architecture
- */
- /**
- * 定單類
- */
- class Order {
- /**
- * 定單ID
- * @var <type>
- */
- private $_order_id;
- /**
- * 客戶ID
- * @var <type>
- */
- private $_customer_id;
- /**
- * 定單金額
- * @var <type>
- */
- private $_amount;
- public function __construct($order_id, $customer_id, $amount) {
- $this->_order_id = $order_id;
- $this->_customer_id = $customer_id;
- $this->_amount = $amount;
- }
- /**
- * 實例的刪除操作
- */
- public function delete() {
- $sql = "DELETE FROM Order SET WHERE order_id = " . $this->_order_id . " AND customer_id = " . $this->_customer_id;
- return DB::query($sql);
- }
- /**
- * 實例的更新操作
- */
- public function update() {
- }
- /**
- * 插入操作
- */
- public