#php #transactions #rollback #enterprise
#php #транзакции #Откат #Предприятие
Вопрос:
Чтобы реализовать некоторые из моих функций, мне нужно вызвать набор API по порядку. Бывают случаи, когда один из API-интерфейсов в середине терпит неудачу. В такие моменты мне нужно откатить вызовы API, которые успешно выполнялись до этого. По сути, очередь команд / функций с поддержкой отката транзакций.
Также бывают случаи, когда мне нужно ввести результат одного из вызовов функции в качестве параметра для последующего вызова функции. Так что было бы неплохо, если бы для этого был протокол.
Что я хотел бы знать, сталкивался ли кто-нибудь с такой (php) библиотекой или есть элегантный способ реализовать это, может быть, конечный автомат? Или я несу просто тарабарщину!!
Очевидно, что необходимо учитывать довольно много нюансов, например, что произойдет, если откат тоже завершится неудачей и т. Д..
Я хотел бы назвать эту библиотеку, как показано ниже:
// First Command
$cmd1 =
new TransactionCommand("Command One")
->setFunction(
function () {
echo "Running Command One";
return "One";
}
)
->setRollback(
function () {
return "Rolled Back Command One";
}
);
// Second Command
$cmd2 =
new TransactionCommand("Command Two")
->setFunction(
function ($resultFromCmdOne) {
echo "Running Command Two with".
" result from command one: $resultFromCmdOne";
return "Two";
}
)
->setRollback(
function () {
return "Rolled Back Command Two";
}
);
$cmdQueue = new Native5TransactionCommandQueue();
$cmdQueue->addCommand($cmd1);
$cmdQueue->addCommand($cmd2);
// Process the set of commands
$cmdQueue->process();
Комментарии:
1. Выглядит довольно прилично для меня. В чем ваша проблема? Стандартной библиотеки для решения такой проблемы не существует.
2. Спасибо за поддержку. Я могу реализовать простую библиотеку в строках представленного кода. Но, учитывая проблему, это лучший способ добиться этого?
3. Не пытайтесь быть слишком перфекционистом, вы на правильном пути, поэтому продолжайте и устраняйте узкие места, когда вы с ними сталкиваетесь. Приложения и требования к ним развиваются со временем, выполняйте оптимизацию во время, а не заранее.
4. Спасибо, попробую написать небольшую библиотеку вокруг этого.