Ruby gem中的继承/命名空间

时间:2013-08-06 19:39:38

标签: ruby inheritance rubygems

我正在研究面向运动api的Ruby宝石。我不完全理解类/继承,我正在寻找一些指导。

困境是我有多种运动,棒球,篮球等等,他们在资源方面也有一些相似的重叠,即球员,球队等。

目前,我的结构如下:

module SportsApi
  module Mlb
    class Player
    end
  end
end

如果我有以下内容,我的播放器类会被覆盖还是可以,因为它被包装在模块中?

module SportsApi
  module Nfl
    class Player
    end
  end
end

我是否应该拥有一个在所有体育项目中都很常见的玩家类,然后创建单独的MlbPlayer,NflPlayer类继承自通用玩家类?我觉得我需要一个rails单表继承结构,但现在确定如何在这个gem结构中重新实现。

2 个答案:

答案 0 :(得分:1)

如果我有以下内容,我的播放器类会被覆盖还是可以,因为它被包装在模块内?

不,你的班级不会被覆盖。除非有人通过访问SportsApi::Mlb命名空间而故意这样做。

我是否应该拥有一个在所有体育项目中都很常见的玩家类,然后创建从通用玩家类继承的单独的MlbPlayer,NflPlayer类?

问题是,MlbPlayer& NflPlayer需要Player吗?它是否需要它的所有功能并且会稍微偏离它,或者与它共享某些功能?

由于一系列原因,许多人认为继承被认为不太好,主要是因为它无法模拟现实世界(关系主要是“有一个”而不是“是一个”)所以我想建议您考虑使用 Composition http://rubysource.com/composition-inheritance/

答案 1 :(得分: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