Rails ActiveSuppport: Концерн и частные методы

Это отличная идея о заботе в рельсах: http://37signals.com/svn/posts/3372-put-chubby-models-on-a-diet-with-concerns

И также неплохо сделать очень маленькие методы, которые не являются частью публичного API. Без использования проблем они становятся частными методами в классе ruby.

Имеет ли смысл создавать частные методы внутри модуля Rails ActiveSupport:: Concern? Если да, то частная работа как для обычных методов экземпляра, так и для методов класса в определении проблемы?

Ответы

Ответ 1

Имеет ли смысл создавать частные методы внутри модуля Rails ActiveSupport::Concern?

Учитывая, что проблемы - это интеллектуальные модули, которые в конечном итоге будут включены в другие классы - да, это так. Это просто переносимый код, извлекаемое поведение, и я бы хотел рассмотреть его как часть моего контроллера (или модели и т.д.), Когда я его пишу. Таким образом, вы просто объявляете методы private или protected, как обычно.

Возможно, сообщение, которое вы связали, обновлено с 2013 года, но DHH делает именно это в одном из примеров:

module Dropboxed
  extend ActiveSupport::Concern

  included do
    before_create :generate_dropbox_key
  end

  def rekey_dropbox
    generate_dropbox_key
    save!
  end

  private # <- Let 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

Ответ 2

Это просто мое мнение, но сейчас я почесываю голову о методе частного класса, для чего они хороши? В любом случае, если вам действительно нужны ссылки на этот пост: Как создать метод частного класса?

Имеет смысл иметь частные методы экземпляра в модуле беспокойства и будет работать нормально. Частные методы класса будут работать нормально, но, следуя указанному выше сообщению.