Я немного почесал голову над элегантным решением для решения этой проблемы (которая, похоже, не так много решалась).
Мне нравится гибкость шаблона Active Record, но, похоже, он очень чувствителен к условиям гонки, поскольку у вас может быть сотня независимых «авторитетных» копий состояния одновременно (с достаточно загруженным веб-приложением).
Например, что, если у меня есть страница, которая дает игрокам очки с таким кодом:
$user = User::fromUsername($username);
$user->points++;
$user->save();
... и еще одна страница, которая вычитает баллы, например:
$user = User::fromUsername($username);
$user->points -= 100;
$user->save();
Что произойдет, если обе эти страницы будут вызваны почти одновременно? Я предполагаю, что если они будут выполняться в правильном порядке (полностью последовательно), все будет работать нормально, однако что, если вторая страница считывает состояние из базы данных до запуска первой, но сохраняет потом?
Возможно ли вообще решить эту проблему в ActiveRecord? Каковы наилучшие методы для смягчения этого (замки везде?)
Спасибо.