多态是最好的选择吗?

时间:2011-01-16 22:38:20

标签: ruby-on-rails

嘿伙计们,我正在创建一个浏览器游戏,在怪物和用户之间进行战斗(pvp)。怪物模型具有与怪物战斗相关的所有功能。我现在正在创建PvP系统,战斗系统与Monsters相同。所以,我正在考虑创建某种抽象的战斗演示,可能是一个可战斗模型(?)并进行多态关联。

你认为这是我应该遵循的策略,还是我能以更好的方式做到这一点?

2 个答案:

答案 0 :(得分:1)

我想说你应该创建一个可以继承或包含在Person和Monster类中的Combatant类或模块,但是你不应该将多态关联保存到数据库中。你应该只使用两个表:人和怪物。

module Combatant
...
end

class Person < ActiveRecord::Base
  include Combatant
  ...
end

class Monster < ActiveRecord::Base
  include Combatant
  ...
end

答案 1 :(得分:0)

另一个选项是Single Table Inheritance

class Combatant < ActiveRecord::Base
  # Has all the fields we care about and basic damage rules, etc
end

class Person < Combatant
    # Any functions that only players can do
end

class Monster < Combatant
    # any functions that need to be overridden
end