Ruby模块作为命名空间和mixin

时间:2012-04-06 09:14:32

标签: ruby-on-rails ruby

在我正在开发的Rails应用程序中,我有许多“请求”模型。我们使用了大量的Web服务,并且我们对这些服务有很多不同的请求,每个服务都有自己的逻辑(主要是验证)。因此,它们都作为命名空间分组在模块中:

module Request
end

所以现在每个请求都是这样的:

class Request::SendSomeData
end

到目前为止,这么好......事情是我们将会有很多这样的请求,这些请求会分享一些共同的逻辑。包含模块很容易

class Request::SendSomeData
  include Request
end

...(因此它既可以作为命名空间也可以作为mixin),但我想知道是否有一种方法可以在没有包含的情况下实现它(因为它将是某种代码重复)。

Ruby有没有办法将一些实例方法放到模块命名空间中的所有类中而不明确包含模块?

换句话说,我可以有类似的东西:

module Request
  def someMethod
  end
end

class Request::SendSomeData
end

并且能够使用

Request::SendSomeData.new.someMethod

同时?

1 个答案:

答案 0 :(得分:0)

如果没有一些邪恶的hackery,你所要求的就不可能做到。

你要么有太多的课程,要么专注于一个太不重要的问题。每个类只有一行代码。

另一种方法是创建一个基本模型类,正如我之前在another question中所描述的那样,但这需要每个调用set_table_name的派生类,因此它不会为您节省任何输入。