模块还是继承?

时间:2011-04-22 08:45:50

标签: ruby-on-rails ruby

我有库存和仓库模型。还有User和OwnedItem模型。 OwnedItem对库存和仓库具有多态性,因此仓库或库存可以拥有特定用户拥有的物品。

现在,仓库和库存有一定的相似之处。例如,他们以非常类似的方式处理插槽。为了说明,这是我创建的库存功能:

def empty_slots_count
    self.max_slots - self.owned_items.inventory.count
end

这个返回库存的空槽号。仓库的这个功能几乎是相同的(与.inventory部分相同)。所以,现在我想知道模块是否适用于此。

虽然模块可能没问题,但感觉不太自然。如果我在C ++中这样做,我肯定会使用继承。我可能会有另一个类,可能会像SlotManager那样用来处理这个类,而我的Inventory类会继承它并使用它。

但Ruby不支持多重继承(只有mixins?不太了解它)。所以我想问一下,什么是好方法?当然,我愿意研究新事物:)

3 个答案:

答案 0 :(得分:2)

  

虽然模块可能没问题,但事实并非如此   感觉太自然了。

我会说,对于大多数Rubyist来说,它确实感觉很自然。在Ruby中,使用抽象类和所有这些来构建复杂的层次结构链并不常见。相反,常见功能包含在模块中,并包含在需要的位置。如果我没记错的话,Russ Olson的“Eloquent Ruby”会以一种相当不错的方式处理整个主题,而且通常是一本书,我不能向有抱负的Ruby开发人员推荐。

在网上有很多关于mixins的好文章可以帮助你入门,我只是给你相关的链接到“Pickaxe”:

http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html

答案 1 :(得分:1)

为什么不使用忧虑?看看它是如何完成的here

答案 2 :(得分:1)

Ruby对委派有一些很好的支持。如果您的模块想要存储状态信息,您可能想要使用它。