Rottenwood писал(а):
Про синхронизацию - ситуация взять один предмет дважды невозможна, как кроме того что я описал потому как в абстрактном слое, который я применяю для работы с базой данных два события с одним объектом невозможны. Они всегда выполняются в очереди. Думаю что лучше я объяснить вряд ли сумею.
И что толку от этой очереди в абстрактном слое ?
Вы как-то будете оборачивать проверки и действия в транзакции ?
Вам понятие синхронизации знакомо ?
Понятно что код
if item.isMyitem(self) then dropItem()
приведет к фееричным глюкам в варианте, когда человек вышлет две команды
give item вася
drop item
есть некислая вероятность того, что вася получит предмет, после чего "бросит его".
Вам очевидно, что проверка isMyitem ничего тут не даст вообще ?
Потому как между моментом пока он true и пока он drop можно вообще всё, что угодно
с базой и предметом сделать. В других потоках.
А потом ПРОДОЛЖИТЬ его выкидывать в этом потоке. Уже рассчитывая на то состояние,
которое уже не имеет место, и которое уже проверено.
Какие внутренние механизмы и как вас уберегут от подобных проблем ?
По мне, так используя асинхронный веб-сервер надо думать о таких проблемах, а не
о сумме характеристик и классовости...
ЗЫ. Про общие описанные фичи можно тоже подискутировать, но лучше-бы в отдельных ветках.