2011-04-22 101 views
1

我有一个库存和一个仓库模型。还有一个User和OwnedItem模型。 OwnedItem对于库存和仓库是多态的,因此仓库或库存可以拥有特定用户的拥有物品。模块或继承?

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

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

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

尽管模块可能没问题,但它并不太自然。如果我在C++中这样做,我肯定会使用继承。我可能会有另一个类,可能会命名为SlotManager,它可以处理这个问题,而我的Inventory类会继承并使用它。

但是,Ruby不支持多重继承(只有mixins?真的不知道多少)。所以我想问一下,什么是一个好方法?当然,我愿意学习新的东西:)

回答

2

尽管模块可能没问题,但并不是 觉得太自然了。

我想说,对于大多数Rubyists来说,它确实感觉很自然。在Ruby中,构建复杂的层次链,​​抽象类和所有这些并不常见。相反,常见的功能被包装在一个模块中,并包含在需要的地方。如果我没有记错,Russ Olson的“雄辩的Ruby”以相当不错的方式对待这整个话题,并且通常是一本我不能推荐给有抱负的Ruby开发人员的书。

在网络上有混入了不少好文章,让你开始,我只是给你相关链接“镐”:

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

+0

哦,我不知道一个模块是一个标准的做法。有趣的是,我会做那个thanx! – Spyros 2011-04-22 19:35:18

1

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