我已經做了幾個項目,最近使用,我用了快一個關記錄查詢/更新數據庫對象的超類,並以適當類,如用戶類擴展。數據庫對象類PHP
我發現很多類我在寫有完全相同的方法:query_values(),更新(),刪除()等
於是我想出了一個構造函數,看起來像這樣一類:
public function __construct($table, $db_object, $record_id = null){
$this->db = $db_object; // Database object with query methods
$this->table = $table; // The name of the database table
$this->get_column_data();
if(!is_null($record_id)){
// This retrieves all column values,
// stores into private $fields array property
$this->query_values($record_id);
}
}
和子類的構造函數如下:
public function __construct($db_object, $record_id = null){
parent::__construct($this->table, $db_object, $record_id);
}
凡$表屬性在上面定義的,因爲我們應該知道的表的特定對象使用。現在
,所有常用的記錄管理方法是在一個地方,而具體到類的方法都被在各自的子類中定義。
我在這裏看到的最大缺點是所有的數據字段都被拉伸並封裝在$ fields屬性中,因此需要定義通用的get和set方法(通常我會這樣做),這幾乎否定了封裝*或者必須爲我們想要公開的每個屬性專門定義一個方法。
*示例: $ USER_ID = $用戶 - > ID; //不使用我的方法 與 $ USER_ID = $用戶 - > _ GET( '身份證'); //訪問的結果$用戶 - >域[「身份證」]
你認爲這是一個缺點,或加?目標是易於使用,面向對象(封裝),並且簡直太棒了!
成就解鎖:直觀地實現[行數據網關模式](http://martinfowler.com/eaaCatalog/rowDataGateway.html) – Gordon
@戈登 - 謝謝戈登,這證實了我的想法! – AVProgrammer