Спустя пару лет до меня, наконец, дошло, что единственный класс - это неправильно.
поскольку он обязан быть stateless, по очевидным причинам.
И в то же время, нужна некоторая сущность, которая может сохранять свое состояние, и отвечать за один конкретный запрос.
К примеру, Кузьма меня давно уже пинал за то, что не все сообщения об ошибке выдают исходник запроса. А они просто не могут: запрос выдается только в тех местах, где он явно присутствует. Чтобы выводить в других - надо сохранять в переменную класса. А в этом случае начнется ад с вложенными запросами и прочим. Так что лучше уж так.
Плюс можно будет реализовать поддержку нативных плейсхолдеров и множественного выполнения.
В общем, идея разделить либу на два класса, по примеру PDO и Mysqli, не оставляет меня.
Потихоньку пилю в этом направлении.
Хелпер-методы в основном классе хочу оставить, но только как обертку работы через стейтмент:
Но при этом возникает все больше и больше вопросов. Какие методы оставлять в основном классе, а какие передавать в стейтмент?
К примеру, форматирование входящих данных.
Кто его должен делать? Основной класс, или стейтмент?
Если делать по примеру старших товарищей, то основной класс (PDO::quote).
Но у меня таких методов много. И, самое главное - я АДСКИ не хочу делать методы форматирования публичными. Программист НЕ ДОЛЖЕН дергать их руками! Они должны использоваться только для обработки плейсхолдеров.
То есть, это должны быть методы стейт мента.
Но тогда им нужен коннекшен. Получается, в конструктор стейтмента надо передавать экземпляр основного класса, и делать переменную с коннектом (mysqli resource) публичным.
Так вообще делают? Как-то не хочется его наружу отдавать тоже. Или ничего?
Как вообще поступают в таких случаях?
поскольку он обязан быть stateless, по очевидным причинам.
И в то же время, нужна некоторая сущность, которая может сохранять свое состояние, и отвечать за один конкретный запрос.
К примеру, Кузьма меня давно уже пинал за то, что не все сообщения об ошибке выдают исходник запроса. А они просто не могут: запрос выдается только в тех местах, где он явно присутствует. Чтобы выводить в других - надо сохранять в переменную класса. А в этом случае начнется ад с вложенными запросами и прочим. Так что лучше уж так.
Плюс можно будет реализовать поддержку нативных плейсхолдеров и множественного выполнения.
В общем, идея разделить либу на два класса, по примеру PDO и Mysqli, не оставляет меня.
Потихоньку пилю в этом направлении.
Хелпер-методы в основном классе хочу оставить, но только как обертку работы через стейтмент:
PHP:
public function getOne()
{
$args = func_get_args();
$query = array_shift($args);
return $this->prepare($query)->execute($args)->fetchOne();
}
К примеру, форматирование входящих данных.
Кто его должен делать? Основной класс, или стейтмент?
Если делать по примеру старших товарищей, то основной класс (PDO::quote).
Но у меня таких методов много. И, самое главное - я АДСКИ не хочу делать методы форматирования публичными. Программист НЕ ДОЛЖЕН дергать их руками! Они должны использоваться только для обработки плейсхолдеров.
То есть, это должны быть методы стейт мента.
Но тогда им нужен коннекшен. Получается, в конструктор стейтмента надо передавать экземпляр основного класса, и делать переменную с коннектом (mysqli resource) публичным.
Так вообще делают? Как-то не хочется его наружу отдавать тоже. Или ничего?
Как вообще поступают в таких случаях?
Последнее редактирование: