特定のアプリケーションに取り組んでいると、非常によく似たクエリを何度も書き続けます。それらはまったく同じではありませんが、非常に似た形式であり、ほぼ同じコードのチャンクに埋め込まれています。
$Mysqli = new mysqli;
if ($Stmt = $Mysqli->prepare("SELECT foo
FROM tblFoo
WHERE something = ?")) {
$Stmt->bind_param('s', $this->_something);
$Stmt->execute();
if (0 != $Stmt->errno)
throw new Exception("blah, blah, blah");
$Stmt->bind_result($foo);
while ($Stmt->fetch()){
$this->_foos[] = new Foo($foo);
}
$Stmt->close();
} else {
throw new Exception("blah, blah, blah"););
}
}
その後、別の場所で...
$Mysqli = new mysqli;
if ($Stmt = $Mysqli->prepare("SELECT bar, baz
FROM tblBar
WHERE somethingElse = ?")) {
$Stmt->bind_param('s', $this->_somethingElse);
$Stmt->execute();
if (0 != $Stmt->errno)
throw new Exception("blah, blah, blah");
$Stmt->bind_result($bar, $baz);
while ($Stmt->fetch()){
// do something else with $bar and $baz
}
$Stmt->close();
} else {
throw new Exception("blah, blah, blah"););
}
}
...そして別の場所で別の...など。
これは本当に DRY に違反しているのでしょうか? この種のクエリを実行するためのクラスを作成し (テーブル、列、バインドされた変数などのコンストラクターパラメーターまたはセッターを使用)、それをアプリ全体で再利用するのは意味がないようです。しかし同時に、自分自身を繰り返しているというしつこい気持ちを振り払うことはできません.
おそらく、単純なクエリを記述する方法が非常に多く、このような一定量の繰り返しが予想されるだけです。
考え?