Эта мысль пришла мне в голову, и я понятия не имею, сумасшедшая она или нет.Никакие примеры, которые я нашел в Интернете, не созданы таким образом.Я создаю оболочку вокруг MySQLi (или, может быть, PDO), и я только на стадии разработки.Это для личного проекта, чтобы узнать больше о дизайне ОО, так что, хотя я ценю мысли об использовании Doctrine или Propel или что-то еще, нет, спасибо.Этот вопрос должен помочь мне узнать некоторые лучшие принципы дизайна;Я знаю, что код будет работать, но с точки зрения дизайна, я работаю безумно?
Это будет мой первый опыт работы с транзакциями в PHP с MySQL.Я понимаю основы - используйте оператор try / catch, коммит в конце, откат, если есть исключение.Но посередине приведен список операторов для выполнения:
(псевдокод)
try
{
$db->startTransaction();
$db->query('...');
$db->query('...');
$db->query('...');
$db->commit();
} catch (Exception $exc)
{
$db->rollback();
}
Что если метод query
добавляет запросы во внутренний массив?Затем метод commit
выполняет этот тип try / catch внутри и выбрасывает другое исключение.Вот так (опять же, псевдокод):
$db = new AwesomeDBWrapper('...');
$db->query('...');
$db->query('...');
try
{
$db->commit();
} catch (AwesomeDBWrapperCommitException $exc)
{
echo $exc;
}
Метод commit
может запустить транзакцию, запрос, фиксацию или откат.Это может сработать, но мой вопрос действительно о дизайне - это слишком много?
В моем псевдокоде есть подводные камни - он не учитывает чтение противзапись в базу данных, так что в действительности должны быть методы query
, update
, insert
, delete
и т. д.
Имеет ли это какой-то смысл с точки зрения проектирования ОО?Это кажется хорошим с точки зрения кодирования - вы можете написать свои выражения вне try / catch в обычном коде, а затем выполнить позже.Это тоже немного раздражает ...