相关疑难解决方法(0)

编码成就系统的最佳方式

我正在考虑设计一个在我的网站上使用的成就系统的最佳方法.数据库结构可以在最佳方式找到,告诉3个或更多连续记录缺失,这个线程实际上是从开发人员那里获得想法的扩展.

我在这个网站上有很多关于徽章/成就系统的讨论就是这个问题 - 这都是谈话而不是代码.实际的代码实现示例在哪里?

我在这里提出一个设计,我希望人们可以做出贡献,并希望为编码可扩展的成就系统创建一个好的设计.我不是说这是最好的,远非它,但它是一个可能的起点.

请随时提出您的想法.


我的系统设计理念

似乎普遍的共识是创建一个"基于事件的系统" - 每当一个已知事件发生时,如创建,删除等帖子,它就像这样调用事件类.

$event->trigger('POST_CREATED', array('id' => 8));
Run Code Online (Sandbox Code Playgroud)

然后事件类找出哪些徽章正在"监听"此事件,然后查找requires该文件,并创建该类的实例,如下所示:

require '/badges/' . $file;
$badge = new $class;
Run Code Online (Sandbox Code Playgroud)

然后它调用默认事件传递调用时收到的数据trigger;

$badge->default_event($data);
Run Code Online (Sandbox Code Playgroud)

徽章

这就是真正的魔法发生的地方.每个徽章都有自己的查询/逻辑,以确定是否应颁发徽章.每个徽章都以例如以下格式列出:

class Badge_Name extends Badge
{
 const _BADGE_500 = 'POST_500';
 const _BADGE_300 = 'POST_300';
 const _BADGE_100 = 'POST_100';

 function get_user_post_count()
 {
  $escaped_user_id = mysql_real_escape_string($this->user_id);

  $r = mysql_query("SELECT COUNT(*) FROM posts
                    WHERE userid='$escaped_user_id'");
  if ($row = mysql_fetch_row($r))
  {
   return $row[0];
  }
  return 0;
 }

 function default_event($data)
 { …
Run Code Online (Sandbox Code Playgroud)

php mysql database design-patterns

84
推荐指数
1
解决办法
1万
查看次数

存储徽章标准的最佳方法是什么?

我一直在考虑如何在新网站上实现类似于SO的徽章功能.存储徽章标准的最佳方法是什么?

两个想法:

  • 所有代码
  • '第二系统' - 创建用于定义徽章及其标准的元架构.将一些信息存储在数据库中,并让代码查询它以找出徽章及其标准.

还有更好的方法吗?

architecture badge

33
推荐指数
2
解决办法
4333
查看次数

标签 统计

architecture ×1

badge ×1

database ×1

design-patterns ×1

mysql ×1

php ×1