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 クラスを持たせます。
多分私は問題をそれよりも大きくしていますか?