我一直在爲第三方產品數據庫API的Ruby包裝工作。如何「繼承」一個Ruby模塊來創建另一個模塊?
該API爲REST-ish,並且具有產品,類別,公司,事件等模型,API端點如/api/Product.getInfo
。
我的方法是使用API調用包裝和方便的方法爲這些API模型創建相應的Ruby類。 所有這些模型類共享相同的父類Base,它抽象出API調用並具有其他共同特徵。
這些API模型之間有很多相似之處。例如,產品,公司和事件模型可以被標記,因此有一組API調用標記,例如createTag
,deleteTag
,getTags
,爲了抽象標記功能,我創建了Taggable
模塊,並將它包含在這三種模式。
現在,問題是,有兩個主要API調用 - createReview
和getReviews
這個「審查」功能,在產品,事件,公司和其他模型(爲簡單起見,省略)之間共享;但是,只有產品和事件型號支持createRiview
和getReviews
,其餘僅支持getReviews
。
然後,我想那會是不錯的兩個模塊 - Reviewable
和WithReviews
其中前者(讀/寫)「繼承」後(只讀),但顯然,紅寶石不支持子moduling。
現在該怎麼辦?
- 我應該做一個只寫版本,而不是讀/寫版本(即
Reviewable
)和包括在產品和事件模型兩個模塊? - 是否有任何Ruby方式以某種方式「繼承」
WithReviews
(只讀)創建Reviewable
(讀/寫)? - 還是我完全關閉,並有更好的方法來解決這類問題?
另外,您如何看待我的模塊命名?
一樣,
- 加標籤=讀取和寫入標籤上的型號
- 應審查=與上面相同的評論
- WithReviews =唯讀審閱功能
我想前兩個聲音聽起來不錯,但有沒有更好的方式或命名只讀版本的約定? 您是否有任何關於WRITE-ONLY模塊命名的建議,以防我必須創建一個?
謝謝!
SAKI = D
「read/write」,「read-only」是什麼意思? – Newben
對不起,我還不清楚... 「讀/寫」=>可檢查的模塊,包裝createReview(寫)和getReviews(讀)API調用。 「只讀」=> WithReviews模塊只包含getReviews(讀取)API調用。 謝謝! – Sacki
這有很多意見引發的問題,很少有事實可以回答。 –