2013-11-25 109 views
1

我一直在爲第三方產品數據庫API的Ruby包裝工作。如何「繼承」一個Ruby模塊來創建另一個模塊?

該API爲REST-ish,並且具有產品,類別,公司,事件等模型,API端點如/api/Product.getInfo

我的方法是使用API​​調用包裝和方便的方法爲這些API模型創建相應的Ruby類。 所有這些模型類共享相同的父類Base,它抽象出API調用並具有其他共同特徵。

這些API模型之間有很多相似之處。例如,產品,公司和事件模型可以被標記,因此有一組API調用標記,例如createTag,deleteTag,getTags,爲了抽象標記功能,我創建了Taggable模塊,並將它包含在這三種模式。

現在,問題是,有兩個主要API調用 - createReviewgetReviews這個「審查」功能,在產品,事件,公司和其他模型(爲簡單起見,省略)之間共享;但是,只有產品和事件型號支持createRiviewgetReviews,其餘僅支持getReviews

然後,我想那會是不錯的兩個模塊 - ReviewableWithReviews其中前者(讀/寫)「繼承」後(只讀),但顯然,紅寶石不支持子moduling。

現在該怎麼辦?

  1. 我應該做一個只寫版本,而不是讀/寫版本(即Reviewable)和包括在產品和事件模型兩個模塊?
  2. 是否有任何Ruby方式以某種方式「繼承」WithReviews(只讀)創建Reviewable(讀/寫)?
  3. 還是我完全關閉,並有更好的方法來解決這類問題?

另外,您如何看待我的模塊命名?

一樣,

  • 加標籤=讀取和寫入標籤上的型號
  • 應審查=與上面相同的評論
  • WithReviews =唯讀審閱功能

我想前兩個聲音聽起來不錯,但有沒有更好的方式或命名只讀版本的約定? 您是否有任何關於WRITE-ONLY模塊命名的建議,以防我必須創建一個?

謝謝!

SAKI = D

+0

「read/write」,「read-only」是什麼意思? – Newben

+0

對不起,我還不清楚... 「讀/寫」=>可檢查的模塊,包裝createReview(寫)和getReviews(讀)API調用。 「只讀」=> WithReviews模塊只包含getReviews(讀取)API調用。 謝謝! – Sacki

+0

這有很多意見引發的問題,很少有事實可以回答。 –

回答

1

你可以在模塊可審查中包含模塊WithReviews。

module WithReviews 
    def getReviews;end 
end 
module Reviewable 
    include WithReviews 
    def createReview;end 
end 
+1

謝謝!我想要的就是你在這裏寫的東西! – Sacki

+0

這是我的榮幸,:-) – uncutstone

0

這不是很容易理解你的問題。但是,這裏有一些普遍性

您可以在模塊內創建模塊。所以書面方式,這是可能

module A 
    module B 
    ... 
    end 
end 

順便說一句,你可以includeextend內其他模塊。兩者之間的區別在於,拳頭轉移實例方法和第二類方法。你可以看看這個doc

+0

謝謝!我想要的是'包括'WithReviews內審查! – Sacki