Задать вопрос
ARACOOOL
@ARACOOOL
PHP Developer

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

Здравствуйте.
Такой вопрос: Как достичь атомарности при выполнение бизнес логики которая состоит из нескольких этапов.
К примеру: пополнение пользовательского счета.
Нужно внести изменения в БД и уведомить пользователя. Вся логика разбита по адаптерам и объединяется на самом верхнем уровне в сервисе.
Нужно что бы при любой ошибке, в этом действии, откатывала состояние системы до выполнения действия.
  • Вопрос задан
  • 281 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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 из тех таблиц
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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