Stackoverflow 有一个漂亮的徽章系统。我注意到的一件事是,徽章不会立即授予,但有时在我达到标准后似乎会有某种延迟。我在其他一些也有徽章的网站上注意到了这一点。
这大概是因为他们正在使用延迟作业,该作业会定期扫描以查看是否需要授予任何新徽章。我在这里也看到了这种方法:
如何实现徽章?
但是,我真的不明白为什么这应该是必要的,并且我倾向于在我的实现中简单地拥有一个系统,在执行相关操作之后,例如发布新评论,调用 checkAwardBadge 函数,它检查是否用户满足新评论徽章的标准。
Speedwise,我认为所有相关的用户统计信息都将简单地存储在 User 的子模型中,例如 UserStats,这样就不必每次都计算评论的数量,而只是一个简单的查询。
令我震惊的是,我喜欢的系统应该是快速且易于理解的。关于为什么有必要通过延迟工作使事情复杂化,我在这里是否遗漏了一些缺点?
澄清一下:我计划有一个抽象类成就,每个实际成就都是成就的实现。每个成就都会有一个 checkAwardBadge 函数,可以从控制器调用,如果我应该选择走那条路线,甚至可以延迟工作,或者任何时候,检查用户是否获得了某个徽章。因此,成就代码将全部集中。