2012-03-11 11 views
2

をダウンロードして、Webアプリケーションを作成するプロジェクトに挿入します。 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クエリを置くのですか?つまり、インターネット上の例では、認証システムのデータベースクエリが、全く異なる2つのモジュール間の強い結合をしていることがわかります。 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

+1

より良いもの:PDOまたはMySQLiオブジェクトを直接使用します。自分で書く必要はありません。他の部分はIMHOのように見えますが、実際のオブジェクトをデータベース層に無関係にするだけです。 – hakre

答えて

関連する問題