2012-03-11 44 views
2

在創建Web應用程序的項目中使用Im。用php5編寫。將數據庫代碼解耦爲實數

當我創建用戶系統(登錄,註冊新用戶和東西)時,突然間我的數據庫代碼都在這個地方。不要誤解我的意思,我使用單一的數據庫類與單一的查詢功能。

class MySQLDB { 

    private staic $instance = null; 
    private $config; 
    private $connection = null; 

    [...] 

    public function query($query, $other_dbname = NULL) { 
     $name = $this->config->dbname; 
     if($other_dbname != NULL) { 
      $name = $other_dbname; 
     } 

     mysql_select_db($name, $this->connection); 
     $result = mysql_query($query); 
     [...] 
    } 

到目前爲止好。但是,在哪裏放置SQL查詢?我的意思是,在互聯網上的例子中,您可以看到認證系統中的數據庫查詢在兩個完全不同的模塊之間建立了強大的耦合。如果我們決定不使用MySQL數據庫會怎樣?那麼你不必僅僅用連接和查詢功能替換MySQLDB類,而是用整個Web應用程序的所有部分用SQL查詢替換它們。

我的解決方案是在MySQLDB類旁邊有一個MySQLQueryer靜態類。我在哪裏保存並執行所有SQL查詢。像這樣的寄存器一個新用戶的功能:

public function register($user, $hash, $salt) { 
    $user = mysql_real_escape_string($user); 
    $query = "INSERT INTO users (username, password, salt) VALUES ('$user' , '$hash' , '$salt');"; 
    $ret = $this->db->query($query); 

    return $ret; 
} 

注意,哈希和鹽的所有創建的用戶認證模塊中完成的(即不是數據庫模塊)。

你認爲這是一個很好的解決方案還是有更好的解決方案?例如,最好是創建一個AuthenticationMySQLDatabaseHelper類,並在其中使用上面的註冊函數?也就是說,每個單獨的模塊都有自己的MySQLDatabaseHelper類來執行查詢。

也許我的問題比這更大?

+3

答案可能會包含像Doctrine,Propel,Symphony,Yee等詞。 – biziclop 2012-03-11 10:24:47

+1

更好的:直接使用PDO或MySQLi對象,你不需要自己寫一個。另一部分看起來不錯,恕我直言,只是讓你的真實對象不可知數據庫層。 – hakre 2012-07-03 09:50:11

回答