我一直在研究一些第三方产品数据库API的Ruby包装器。
API是REST-ish,具有产品,类别,公司,事件等模型,API端点如/api/Product.getInfo
。
我的方法是使用API调用包装器和方便的方法为这些API模型创建相应的Ruby类。 所有这些模型类共享相同的父类Base,它抽象API调用并具有其他共同特征。
theese API模型之间有很多相似之处。例如,可以标记产品,公司和事件模型,因此有一组用于标记的API调用,例如createTag
,deleteTag
,getTags
,以及抽象标记功能,我创建了Taggable
模块并将其包含在这三个模型中。
现在问题是,这个“审核”功能有两个主要API调用 - createReview
和getReviews
,在产品,事件,公司和其他一些模型之间共享(为简单起见省略) );但是,只有产品和事件模型支持createRiview
和getReviews
,其余只支持getReviews
。
然后我认为有两个模块很好 - Reviewable
和WithReviews
前者(读/写)“继承”后者(只读),但显然,Ruby不支持子模块化。
我现在该怎么办?
Reviewable
)并在产品和事件模型中包含这两个模块吗? WithReviews
(只读)来创建Reviewable
(读/写)? 另外,您如何看待我的模块命名?
像,
我认为前两个听起来很好,但有没有更好的方法或约定命名只读版本? 如果我必须创建一个模块命名,你有什么建议吗?
谢谢!
SAKI = D
答案 0 :(得分:1)
您可以在模块Reviewable中包含模块WithReviews。
module WithReviews
def getReviews;end
end
module Reviewable
include WithReviews
def createReview;end
end
答案 1 :(得分:0)
理解你的问题并不是很简单。但是,这里有一些普遍性
您可以在模块内创建模块。所以写这个是可能的
module A
module B
...
end
end
顺便说一句,你可以在其他人中使用include
或extend
个模块。两者之间的区别在于,第一种是传递实例方法,第二种是方法。您可以查看此doc