iT邦幫忙

0

PHP 物件導向,類別的設計

  • 分享至 

  • xImage

我用 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 來查詢數據庫
    }
}

想請問應該用哪種方式比較好?
各有什麼優缺點呢?
謝謝!

fillano iT邦超人 1 級 ‧ 2021-11-18 15:33:13 檢舉
第二種通常叫做DAO,不是你要的東西,而是去操作你要的東西的方法而以。
samjam iT邦新手 3 級 ‧ 2021-11-20 07:19:03 檢舉
謝謝您的回答,我再去了解一下 DAO。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1

這樣來說好了。

第一種是靈活性不夠。如果只是簡單的操作,如指定單一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();
}

大約上面的應用處理就好。

samjam iT邦新手 3 級 ‧ 2021-11-20 07:20:47 檢舉

謝謝您的回答,我大概知道方向了,謝謝您。

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-11-19 09:51:27

兩種都不好

如果拿著海之霸的熱狗指著我的頭強迫我選擇的話
我會選第1種
因為第2種實在太牙給了

看更多先前的回應...收起先前的回應...
samjam iT邦新手 3 級 ‧ 2021-11-20 07:22:06 檢舉

謝謝您的回答,想請問對您來說比較理想的方式是如何做呢?

對我來說
我會直接使用SQL指令存取資料庫
不會透過另外定義的物件class

samjam iT邦新手 3 級 ‧ 2021-11-22 10:00:52 檢舉

那請問如果以 MVC 來看,
我這樣另外定義物件的class去存取資料庫,
是不是算是 MVC 中的 Model,
而您是直接在 Controller 中使用SQL指令,
請問我這樣的理解對嗎?

我沒有想過這個問題
所以我不知道對不對

samjam iT邦新手 3 級 ‧ 2021-11-23 11:12:07 檢舉

了解,謝謝您的回答。

我要發表回答

立即登入回答