Здравствуйте, ·, Вы писали:
·>Ну объяснил же уже вроде. Не просто проверка, а условная атомарная операция. Псевдокод:
Agreement — очевидно это договор.
·>SELECT Version, startDate...etc FROM Agreement WHERE id=1;
·>var CurrentVersion = Version;
·>// проверяем... долго и упорно
·>checkIt(startDate);
·>...
·>checkIt(etc);
·>// фиксируем
// Почему здесь Agreement? Подтверждаем-то мы заказ!
·>UPDATE Agreement SET Confirmed='YES' WHERE id=1 AND Version=CurrentVersion;
·>if(updatedRecords==0) rollback;// упс - облом, придётся начать сначала.
·>Ну и модифицирующие операции (все или как минимум те, которые могут влиять на проверки) должны изменять версию:
Это классика оптимистической блокировки, но работает она в пределах одного агрегата, а у нас здесь два (в реальности конечно больше)...