我用 PHP 要做一個可以查詢數據庫的功能,
有 3 個資料表 Product、Customer、purchase,
請問類別之間的關係如何設計比較好?
我想到 2 種設計方式:
第 1 種:
每個資料表都是一個子類,繼承 Sheet,Sheet 可以先定義好方法的 sql 語句,給子類使用,或是子類可以實現自己的 sql 語句。
abstract class Sheet {
abstract public function create();
abstract public function select();
abstract public function update();
abstract public function delete();
}
class Product extends Sheet { // 實現自己的 sql 語句 }
class Customer extends Sheet { // 實現自己的 sql 語句 }
class purchase extends Sheet { // 實現自己的 sql 語句 }
第 2 種:
每個資料表不創建類別,只創建一個 Sql 類,負責查詢數據庫,當要查詢時再傳入相關 sql 語句。
class Sql {
public function create($value) {
// 使用 $value 來查詢數據庫
}
public function select($value) {
// 使用 $value 來查詢數據庫
}
public function update($value) {
// 使用 $value 來查詢數據庫
}
public function delete($value) {
// 使用 $value 來查詢數據庫
}
}
想請問應該用哪種方式比較好?
各有什麼優缺點呢?
謝謝!
這樣來說好了。
第一種是靈活性不夠。如果只是簡單的操作,如指定單一ID,那還可以。
但太過複雜就不太行。
第二種更是不要考量就是了,因為如果能直接喂SQL碼。
分成4個子類完全沒意義。
一般的思考點,你是想做DB物件應用的方式。
還是要做表操作的應用方式。
第一種來說,考量安全性上,將對應的where select join group order給分門子類出來就好。並做為副屬類型的方式。
再來就是直接取值類型的方式。如get
給值則用 put save update edit
移除則用 remove delete
等最後執行式。
如果是打算做表類型。一般只用來做為動作方法發。
如某個表假設USER好了。
則
function getUserData($userid){
return $db->query("select * From USER WHERE userid={$userid}")->get();
}
function getUserName($userid){
return $db->query("select name From USER WHERE userid={$userid}")->get();
}
大約上面的應用處理就好。
兩種都不好
如果拿著海之霸的熱狗指著我的頭強迫我選擇的話
我會選第1種
因為第2種實在太牙給了