4

我想尝试在我正在构建的新网站上设计奖励系统。例如(仅用于说明目的):

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

堆栈溢出的奖牌系统是另一个例子。

我的问题是,您可以轻松地将每个徽章的描述和名称存储在数据库表中。

**tbl_Badges**
ID  |  Badge Name  |  canHaveMultiple   |  hasProgress  |  progressScale
----------------------------------------------------------------------------
1     Copy Editor     Yes                    No                null
2     The Mob         Yes                    No                null
3     Jquery          No                     Yes               100

然后将用户与这些徽章相关联:

**tbl_UsersBadges**
ID  |  Badge ID  | User ID
---------------------------
1      1            5
2      1            5
3      2            5
4      2            12

(也许还有另一个通过比例徽章等来存储用户进度)

但困难在于对奖励这些徽章的触发器进行编程。

像这样的系统是在网站中使用硬编码触发器构建的吗?由于这些徽章的广泛性和灵活性,这是我能想到的唯一方法。但是,如果触发器被硬编码为徽章 ID,则在更改任何内容时都必须非常小心。

那么这样的系统是这样工作的吗?这与我所学的背道而驰。还是我错误地解决了这个问题?

4

2 回答 2

4

首先,您需要确保您有一个明确的“奖励”用户操作列表。然后,您必须创建一些代码,这些代码将在其中一个操作发生时触发。有多种方法可以查看解决方案:

  1. 将可能导致奖励的每个动作保存在数据库中。然后,数据库中的实际触发器将根据这些操作属性授予徽章,或者 crontab 作业可能会完成这项工作。好处是,如果你改变你的奖励系统计算,你可以重播用户的操作来取回新的奖励;
  2. 编写一些在调用任何其他方法之前自动调用的集线器方法。根据动作,您可以授予奖励,然后重定向到真实方法;
  3. 使用您提到的硬编码操作,但这很乏味且容易出错;
于 2011-02-22T11:48:48.173 回答
1

我只是从软件中抛出事件并从后端助手中捕获它们,甚至是异步的,后端助手将添加徽章、安排通知等。您可以使用消息系统(AMQP 或类似的)来处理来自后端助手的这些事件。

于 2011-02-22T11:51:16.540 回答