Ich arbeite an einer bestimmten Anwendung, schreibe immer wieder sehr ähnliche Abfragen, immer wieder. Sie sind nicht genau gleich, sondern haben eine sehr ähnliche Form und sind in fast identische Codestücke eingebettet, z. B. .,DRY und ähnliche Abfragen
$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"););
}
}
und später woanders ...
$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"););
}
}
... und dann noch einen, und eine andere an anderer Stelle ... etc.
Ist dies eine echte Verletzung von DRY ? Es scheint nicht sinnvoll zu sein, eine Klasse zum Ausführen dieser Art von Abfrage (mit Konstruktorparametern oder Setter für Tabelle, Spalte, gebundene Variablen usw.) zu schreiben und sie dann in meiner gesamten App wiederzuverwenden. Aber gleichzeitig kann ich dieses quälende Gefühl, dass ich mich wiederhole, nicht abschütteln.
Vielleicht ist es nur so, dass es nur so viele Möglichkeiten gibt, eine einfache Abfrage zu schreiben und dass eine gewisse Anzahl von Wiederholungen wie diese zu erwarten ist.
Gedanken?
@Kibbee - Danke. Ich werde nicht Hibernate verwenden, aber ich habe eine ActiveRecord-Klasse erstellt und dann einige Klassen für bestimmte Tabellen substriert. – PartialOrder