我正在研究面向运动api的Ruby宝石。我不完全理解类/继承,我正在寻找一些指导。
困境是我有多种运动,棒球,篮球等等,他们在资源方面也有一些相似的重叠,即球员,球队等。
目前,我的结构如下:
module SportsApi
module Mlb
class Player
end
end
end
如果我有以下内容,我的播放器类会被覆盖还是可以,因为它被包装在模块中?
module SportsApi
module Nfl
class Player
end
end
end
我是否应该拥有一个在所有体育项目中都很常见的玩家类,然后创建单独的MlbPlayer,NflPlayer类继承自通用玩家类?我觉得我需要一个rails单表继承结构,但现在确定如何在这个gem结构中重新实现。
答案 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