2

我正在尝试为游戏应用程序设计积分系统,并且在找出设置模型的最佳方法时遇到了一些问题。基本需求是:

  • 每个用户本质上都可以分配一个“PointsCalculator”对象,负责跟踪用户获得的积分

  • 每个用户的“PointsCalculator”逻辑可能不同。例如,一个用户每次连续玩一个多小时可能会额外获得 100 分。另一个用户可能会在晚上 8 点到晚上 10 点之间获得双倍积分。

我们正在尝试找出创建模型设置的最佳方法,该设置将允许我们存储可以为每个用户定制的逻辑,但仍然是 DRY 和可测试的。

我不需要任何人为我编写代码 - 我更希望感谢更有经验的开发人员或过去解决过类似问题的任何人的反馈。

注意:为了更清楚起见,上面已经过编辑,但如果仍然不清楚,请告诉我。

4

1 回答 1

3

取决于您的复杂程度的难题:

  • 如果所有积分计算器都定义明确,您应该使用单表继承 (STI)。最简单的情况。

  • 但是,如果需要很大的灵活性,这将变得更加困难,您应该考虑动态地包含方法,例如 DCI。这是最复杂的。请参阅下面的详细信息。

例如:您将计算器行为列表存储在模型中的序列化对象中:

behaviors = [ 'behavior1', 'behavior2' ]

每个行为都链接到具有相同名称的类或模块,例如:Behavior1Behavior2.

然后,您可以在需要时随时向对象添加行为,例如在after_initialize.

after_initialize :set_behaviors

def set_behaviors
  behaviors.each do |b|
    self.extend(b.constantize)
  end
end
于 2012-09-08T13:02:16.507 回答