我一直在考虑如何在新网站上实现类似于 SO 的徽章功能。存储徽章标准的最佳方式是什么?
两个想法:
- 所有代码
- “第二个系统” - 创建用于定义徽章及其标准的元架构。在数据库中存储一些信息并让代码查询它以找出徽章及其标准。
有没有更好的方法?
我一直在考虑如何在新网站上实现类似于 SO 的徽章功能。存储徽章标准的最佳方式是什么?
两个想法:
有没有更好的方法?
规则。
您在系统中创建事件,并在事件流处理器中使用规则。
具体来说,假设您有一个“发了 10 个帖子”的徽章。您不会为每个帖子运行“从 user = :user 的帖子中选择计数(*)”。相反,您有一个简单的规则来监视每个帖子,并“计算它们”,将规则状态存储在用户配置文件中。
这样,“发 10 个帖子”就和“发 1,000,000 个”帖子一样便宜。
这也使系统更具可扩展性。
我同意威尔的观点。
在页面上创建“事件”,以便每次发生事件时,即。用户删除帖子,它将使用事件查询事件模块,比如说,EVENT_USER_DELETE_POST,然后您可以选择该事件并基于它构建查询。然后,您可以决定是否授予徽章。
这将使两个逻辑保持分离并保持模块化设计。这种方式应该很容易实现。
唯一的缺点是,如果事件没有被“捕获”,那么用户很可能已经获得了徽章标准,但尚未获得奖励。但是,这绝不应该发生。我能想到的唯一情况是手动操作数据库。