У Stackoverflow есть отличная система значков. Одна вещь, которую я заметил, это то, что значки не сразу присуждаются, но иногда, похоже, есть какая-то задержка после того, как я отвечаю критериям. Я заметил это на некоторых других сайтах, у которых есть значки.
Предположительно это связано с тем, что они используют задержанную работу, которая периодически проверяет, нужно ли получать новые значки. Я также вижу здесь этот подход:
Как реализовать значки?
Однако я действительно не понимаю, почему это необходимо, и я предпочитаю в своей реализации просто иметь систему, в которой после выполнения соответствующего действия, например, отправляется новый комментарий, вызывается функция checkAwardBadge, который проверяет, соответствует ли пользователь критериям для нового значка комментария.
Speedwise, я думал, что все соответствующие статистики пользователей будут просто спрятаны в подмодели пользователя, например UserStats, так что вместо того, чтобы каждый раз подсчитывать количество комментариев, это будет просто простой запрос.
Мне кажется, что система, которую я предпочитаю, должна быть быстрой и очень простой для понимания. Есть ли недостатки, которые мне здесь не хватает, почему необходимо усложнять работу с задержкой?
Чтобы уточнить: Я планирую иметь абстрактные классы Достижения, с каждым фактическим Достижением - реализация Достижений. Каждое достижение будет иметь функцию checkAwardBadge, которая может быть вызвана из контроллера или даже отложенное задание, если я должен выбрать этот маршрут или в любое время, чтобы проверить, получил ли пользователь определенный значок. Таким образом, код достижения будет централизован.