2013-08-06 2 views
0

Я работаю над рубиновой жемчужиной, которая стоит перед спортивным апи. Я не совсем понимаю классы/наследование и ищу некоторые рекомендации.Наследование рубин/пространство имен в рубиновой драгоценности

Затруднительное, у меня есть несколько видов спорта, бейсбол, баскетбол и т.д., и все они имеют некоторые аналогичные совпадения в ресурсах, то есть игроков, команд и т.д.

В настоящее время у меня есть она структурирована следующим образом:

module SportsApi 
    module Mlb 
    class Player 
    end 
    end 
end 

Если у меня есть следующее, будет ли мой класс игрока перезаписан или он в порядке, потому что он завернут внутри модуля?

module SportsApi 
    module Nfl 
    class Player 
    end 
    end 
end 

Должен ли я просто иметь класс игрока, который является общим для всех видов спорта, а затем создать отдельные классы MlbPlayer, NflPlayer, которые наследуют от общего класса игрока? Я чувствую, что мне нужна структура наследования на основе одиночных таблиц rails, но теперь я уверен, что я буду переопределять это в этой структуре драгоценных камней. Любая помощь/предложения оценены!

ответ

1
Если у меня есть следующее, будет ли мой класс игрока перезаписан или он в порядке, потому что он завернут внутри модуля?

Нет, ваш класс не будет перезаписан. За исключением случаев, когда кто-то делает это специально, обращаясь к пространству имен SportsApi::Mlb.

Должен ли я просто иметь класс игрока, который является общим для всех видов спорта, а затем создавать отдельные классы MlbPlayer, NflPlayer, которые наследуются от общего класса игроков?

Вопрос в том, что MlbPlayer & NflPlayer потребуется от Player? Нужна ли ему вся его функциональность и немного отклонится от нее или будет доля с некоторыми функциями?

Наследование считается не очень хорошим для многих из-за множества причин, главным образом потому, что не удается смоделировать реальный мир (где отношения в основном «есть-а», а не «есть-а») d предполагает, что вы рассмотреть возможность использования Состава: http://rubysource.com/composition-inheritance/

0

Надеется, что это помогает:

module SportsApi 
    # Common methods go here 
end 

class Player 
    include SportsApi 
    # Super class 
end 

class NFLPlayer < Player 
    # Child class 
end 

class NBAPlayer < Player 
    # Child class 
end 
+0

Используй '<' для наследования, а не '>'. –

Смежные вопросы