ruby - 我如何 "Inherit"一个 Ruby 模块来创建另一个模块?

标签 ruby api inheritance module

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

7年前关闭。




Improve this question




我一直在为一些第三方产品 DB API 开发 Ruby 包装器。

API 是 REST 式的,具有产品、类别、公司、事件等模型,以及 API 端点,如 /api/Product.getInfo .

我的方法是使用 API 调用包装器和方便的方法为这些 API 模型创建相应的 Ruby 类。
所有这些模型类共享同一个父类 Base,它抽象了 API 调用并具有其他共同特征。

这些 API 模型之间有很多相似之处。例如,产品、公司和事件模型可以被标记,因此有一组用于标记的 API 调用,例如 createTag , deleteTag , getTags ,并且,为了抽象标记功能,我创建了 Taggable模块并将其包含在这三个模型中。

现在,问题是,有两个主要 API 调用的“审查”功能 - createReviewgetReviews ,在 Product、Event、Company 和其他一些模型之间共享(为简单起见省略);但是,只有产品和事件模型同时支持 createRiviewgetReviews ,其余只支持getReviews .

然后我认为有两个模块会很好 - ReviewableWithReviews前者(读/写)“继承”后者(只读),但显然,Ruby 不支持子模块化。

我现在应该怎么办?

  • 我应该制作只写版本而不是读/写版本(即 Reviewable )并在产品和事件模型中包含这两个模块吗?
  • 是否有任何 Ruby 方法可以以某种方式“继承”WithReviews (只读)创建 Reviewable (读/写)?
  • 或者我完全不知道有没有更好的方法来解决这种问题???

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

    喜欢,
  • 可标记 = 模型上的读写标签
  • 可评论 = 与上述评论相同
  • WithReviews = 只读评论功能

  • 我认为前两个 -able 听起来不错,但是有没有更好的方法或约定来命名只读版本?
    如果我必须创建一个,您对 WRITE-ONLY 模块命名有什么建议吗?

    谢谢!!

    萨基=D

    最佳答案

    您可以只在模块 Reviewable 中包含模块 WithReviews。

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

    关于ruby - 我如何 "Inherit"一个 Ruby 模块来创建另一个模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20205414/

    相关文章:

    python - 使用 Python 的 Instagram API

    java - 限制 Jackson REST API 的调用

    r - 如何在扩展S4类的R包中解决警告消息(未找到元数据对象;未导出SpatialLinesNULL类)

    javascript - 为什么 a.y 在这里未定义?

    ruby - 在 OpenSUSE 上构建的鞋子 - Rake 错误

    ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用?

    ios - 如何在iOS应用程序中授权whatsapp?

    objective-c - 如何确定父类(super class)私有(private)方法是否在 Objective-C 中被重写?

    sql - 计算嵌套集中某个级别中的节点数

    windows - 如何在 Windows 上运行的 ruby​​ 上捕获信号