En travaillant sur une application particulière, je continue d'écrire des requêtes très similaires, encore et encore. Ils ne sont pas exactement les mêmes, mais sont de forme très similaire, et incorporés dans des morceaux de code presque identiques, par exemple.,Requêtes DRY et similaires
$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"););
}
}
et plus tard, un autre endroit ...
$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"););
}
}
... et puis un autre, et d'ailleurs une autre ... etc.
Est-ce une véritable violation du SEC ? Il ne semble pas logique d'écrire une classe pour effectuer ce type de requête (avec des paramètres ou des paramètres de constructeur pour une table, une colonne, des variables liées, etc.) et ensuite de la réutiliser dans mon application. Mais en même temps, je ne peux pas ébranler ce sentiment lancinant que je me répète. Peut-être que c'est juste qu'il y a tellement de façons d'écrire une requête simple et qu'une certaine quantité de répétition comme celle-ci est à prévoir.
Pensées?
@Kibbee - Merci. Je n'utiliserai pas Hibernate, mais j'ai créé une classe ActiveRecord, puis j'ai ajouté deux classes pour des tables spécifiques. – PartialOrder