Работая над конкретным приложением, я снова и снова пишу очень похожие запросы. Они не совсем одинаковы, но имеют очень похожую форму и встроены в почти идентичные фрагменты кода, например,,
$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? Кажется, нет смысла писать класс для выполнения такого рода запросов (с параметрами конструктора или сеттерами для таблицы, столбца, связанных переменных и т. д.), а затем повторно использовать его в моем приложении. Но в то же время я не могу избавиться от этого щемящего чувства, что я повторяюсь.
Может быть, дело в том, что существует очень много способов написать простой запрос, и следует ожидать определенного количества подобных повторений.
Мысли?