这是关于rails的关注的一个好主意:http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns
制作非小型公共API的方法也是一个好主意。没有使用顾虑,那些成为红宝石类中的私人方法。
在Rails ActiveSupport :: Concern模块中创建私有方法是否有意义?如果是这样,那么私有化对于关注定义中的常规实例方法和类方法都有效吗?
答案 0 :(得分:25)
在Rails
ActiveSupport::Concern
模块中创建私有方法是否有意义?
考虑到关注点是最终将被包含在其他类中的智能模块 - 是的,确实如此。它只是一个可移植的代码,可提取的行为,我想把它当作我的控制器(或模型等)的一部分,因为我正在编写它。所以基本上你只是像往常一样声明方法private
或protected
。
自2013年以来,也许the post you linked已更新,但DHH在其中一个示例中完全相同:
module Dropboxed
extend ActiveSupport::Concern
included do
before_create :generate_dropbox_key
end
def rekey_dropbox
generate_dropbox_key
save!
end
private # <- Let's list some privates
def generate_dropbox_key
self.dropbox_key = SignalId::Token.unique(24) do |key|
self.class.find_by_dropbox_key(key)
end
end
end
对于private
类方法,我同意@Hugo并且从未使用过它们,但是这里有你如何实现这个目标:
module Dropboxed
extend ActiveSupport::Concern
included do
private_class_method :method_name
end
module ClassMethods
def method_name
end
end
end
答案 1 :(得分:2)
这只是我的意见,但现在我对私人课程方法感到头疼,他们有什么好处?无论如何,如果你真的需要它们,请参考这篇文章:How to create a private class method?
在关注模块中使用私有实例方法是有意义的,并且可以正常工作。私人类方法也可以正常工作,但遵循上述帖子。