Модуль или Наследование? - PullRequest
1 голос
/ 22 апреля 2011

У меня есть модель инвентаря и склада.Существует также модель User и OwnedItem.OwnedItem является полиморфным по отношению к инвентарю и складу, так что склад или инвентарь могут иметь принадлежащий объект для определенного пользователя.

Теперь склад и инвентарь имеют определенное сходство.Например, они обрабатывают слоты довольно похожим образом.Чтобы проиллюстрировать это, я создал функцию инвентаризации:

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

Эта функция возвращает номер пустых слотов инвентаря.Эта функция будет почти одинаковой для склада (идентична ожидаемой для части .inventory).Итак, теперь мне интересно, применим ли модуль здесь.

Хотя модуль может быть в порядке, он не выглядит слишком естественным.Если бы я делал это в C ++, я бы определенно использовал наследование.Вероятно, у меня был бы другой класс, возможно, с именем что-то вроде SlotManager, который бы обрабатывал это, и мой класс Inventory наследовал бы это и использовал бы его.

Но Ruby не поддерживает множественное наследование (только mixins? Не знаю точномного об этом).Поэтому я хотел бы спросить, что было бы хорошим подходом?Конечно, я готов изучать новые вещи:)

Ответы [ 3 ]

2 голосов
/ 22 апреля 2011

Хотя модуль может быть в порядке, он не выглядит слишком естественным.

Я бы сказал, что для большинства Rubyists это действительно естественно.В Ruby не так часто создаются сложные иерархические цепочки с абстрактными классами и всем этим.Вместо этого общая функциональность упаковывается в модуль и включается там, где это необходимо.Если я правильно помню, «Eloquent Ruby» Расс Олсон рассматривает всю эту тему довольно хорошо и, как правило, является книгой, которую я не могу порекомендовать начинающим разработчикам Ruby.

В Интернете довольно много хороших статей о миксинах, для начала я просто дам вам соответствующую ссылку на "Кирку":

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

1 голос
/ 23 апреля 2011

В Ruby есть хорошая поддержка для делегирования. Вы можете использовать его, если ваш модуль хочет хранить информацию о состоянии.

1 голос
/ 22 апреля 2011

Почему бы не использовать проблемы? Посмотрите здесь о том, как это делается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...