簡體   English   中英

Ruby gem中的繼承/命名空間

[英]Inheritance/namespacing in Ruby gem

我正在研究一款面向運動api的Ruby寶石。 我不完全了解類/繼承性,正在尋找一些指導。

困境是我有多項運動,棒球,籃球等,而它們在資源上都有一些相似的重疊,即球員,球隊等。

目前,我的結構如下:

module SportsApi
  module Mlb
    class Player
    end
  end
end

如果我有以下內容,我的播放器類是否會被覆蓋,或者因為它包裝在模塊中而可以嗎?

module SportsApi
  module Nfl
    class Player
    end
  end
end

我是否應該擁有一個在所有運動項目中都通用的播放器類,然后創建從通用播放器類繼承的單獨的MlbPlayer和NflPlayer類? 我覺得我需要一個rails單表繼承結構,但現在確定如何在這個gem結構中重新實現它。

如果我有以下內容,我的播放器類是否會被覆蓋,或者因為它包裝在模塊中而可以嗎?

不,您的課程不會被覆蓋。 除非有人通過訪問SportsApi::Mlb命名空間SportsApi::Mlb這樣做。

我是否應該擁有一個在所有運動項目中都通用的播放器類,然后創建從通用播放器類繼承的單獨的MlbPlayer和NflPlayer類?

問題是, Player需要MlbPlayerNflPlayer什么? 它是否需要所有功能,並且會有所不同,或者與它共享某些功能?

出於很多原因,很多人認為繼承不太好,主要是因為它無法為現實世界建模(關系在大多數情況下是“ has-a”而不是“ is-a”),所以我建議您考慮使用Compositionhttp : //rubysource.com/composition-inheritance/

希望這可以幫助:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM