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 クラスを接続およびクエリ関数と交換するだけでなく、SQL クエリを含む Web アプリケーション全体のすべての部分を交換する必要があります。

私の解決策は、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 クラスを持たせます。

多分私は問題をそれよりも大きくしていますか?

4

1 に答える 1

1

biziclop で述べたように: を見てください。

または他の抽象化レイヤー。

自分で何かを構築したい場合は、やろうとすることから始めるのが良いようです。

于 2012-03-11T12:56:45.587 に答える