将成就添加到商务级软件的技术

Ian*_*oyd 9 language-agnostic design-patterns

我正在考虑为我们的内部错误跟踪和时间记录系统添加一些成就.它连接到SQL Server后端.

起初我认为系统可以在数据库上运行,使用触发器,例如,知道何时:

  • 你已经记录了1000个小时
  • 创造了1000张门票
  • 关闭了自己的机票
  • 工作在一段时间没有触及的机票上.
  • 等等(你知道 - 数据库是什么东西)

但后来我意识到我也想要纯粹的前端成就

  • 使用高级搜索abiltiy
  • 按列排序
  • 将设置重置为默认值
  • 搜索了500次

似乎每项成就的逻辑必须是手工编码的.任何人都可以想象某种成就规则引擎,你可以创建脚本吗?

以及如何存储它们?如果成就是:

  • 在一个会话中更改列排序顺序50次

这意味着每次他们对listview列进行排序时都会更新数据库.

有关此Win32应用程序设计问题的任何想法?我不认为四人帮有成就设计模式.


注意:它是Win32客户端应用程序,而不是网站.


我绝对喜欢事件系统的想法.用户采取的各种操作可以通过单个事件对象引发事件:

protected void TimeEntriesListView_ColumnSort(object sender, EventArgs e)
{
    _globalListener.RaiseEvent(EventType.ListViewColumnSort, sender, e);
}

protected void TimeEntriesListView_ColumnDrag(object sender, EventArgs e)
{
    _globalListener.RaiseEvent(EventType.ListViewColumnDrag, sender, e);
}
Run Code Online (Sandbox Code Playgroud)

然后,该对象可以添加逻辑以决定它想要计数的事件.但更合理的是,各种事件侦听器可以附加到中央事件侦听器,并具有自定义成就逻辑.

Wil*_*ung 5

诀窍不是规则的编码,实际上,这些是直截了当的,也许可以是简单的表达式(number_of_bugs> 1000).

诀窍是累积统计数据.您应该查看一种事件流处理形式来记录您的成就.例如,你真的不想用"从用户=:用户的错误中选择计数(*)"来实现"1000个错误"的成就(你可以这样做,但可以说不应该).相反,你应该在每次发布错误时获得一个事件,并且你实现了系统记录"发现了另一个错误".然后规则可以检查"number_of_bugs> 1000".

显然,您可能需要"灌注泵",在启动成就系统时将number_of_bugs设置为DB中的当前数字.

但目标是保持实际事件处理的轻量级,因此让它跟踪事件,同时在公共内部管道或总线上运行所有事件.

脚本语言也是一个好主意,因为它们可以轻松地评估表达式和更复杂的逻辑.例如,"number_of_bugs> 1000"是一个完全有效的Javascript程序.游戏刚刚建立了环境.

您还可以将脚本存储在数据库中,并创建一个"成就"编辑器,如果您愿意,可以动态添加它们,假设您正在捕获所有相关事件.