ARACOOOL
@ARACOOOL
PHP Developer

Как добиться атомарность бизнес логики?

Здравствуйте.
Такой вопрос: Как достичь атомарности при выполнение бизнес логики которая состоит из нескольких этапов.
К примеру: пополнение пользовательского счета.
Нужно внести изменения в БД и уведомить пользователя. Вся логика разбита по адаптерам и объединяется на самом верхнем уровне в сервисе.
Нужно что бы при любой ошибке, в этом действии, откатывала состояние системы до выполнения действия.
  • Вопрос задан
  • 280 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
На самом верхнем уровне ловить исключения и откатывать изменения.

Псевдокод:
$transaction = $connection->beginTransaction();
try {
    // Этап 1
    $dbAdapter->insert($data);

    // Этап 2
    $mailAdapter->sendMessage();

    // ...

    $transaction->commit();
} catch (Exception $e) {
    $transaction->rollback();
    throw $e;
}


Ещё можете посмотреть в сторону паттерна Unit of Work.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@VisualIdeas
Я не бог PHP современного стиля, и не оч крут в транзакциях, но вот так на вскидку:
1) редактируется 5 таблиц в 5 функциях
2) Каждая функция в случае удачной вставки возвращает ID вставленной записи а в случае неудачи flase
3) Если любая функция возвращает false то предидущие действия отменяем удаляя по ID из тех таблиц
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы