0

我正在开发一个面向体育 api 的 Ruby gem。我不完全理解类/继承,正在寻找一些指导。

困境是我有多种运动,棒球,篮球等,它们在资源上都有一些相似的重叠,即球员、球队等。

目前我的结构如下:

module SportsApi
  module Mlb
    class Player
    end
  end
end

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

module SportsApi
  module Nfl
    class Player
    end
  end
end

我是否应该只拥有一个在所有运动中通用的球员类,然后创建从通用球员类继承的单独的 MlbPlayer、NflPlayer 类?我觉得我有点需要一个 Rails 单表继承结构,但现在确定我将如何在这个 gem 结构中重新实现它。

4

2 回答 2

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

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

我是否应该只拥有一个在所有运动中通用的球员类,然后创建从通用球员类继承的单独的 MlbPlayer、NflPlayer 类?

问题是,MlbPlayer&NflPlayer需要Player什么?它是否需要它的所有功能并且会与它有一点不同,或者它会与它共享一些功能?

由于很多原因,许多人认为继承不太好,主要是因为它无法模拟现实世界(其中关系主要是“has-a”而不是“is-a”)所以我建议你考虑使用组合http ://rubysource.com/composition-inheritance/

于 2013-08-06T19:53:43.463 回答
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
于 2013-08-07T07:07:24.100 回答