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