Метод Ruby Class или Constant, лучшая практика

Один из моих классов ruby ​​извлекает данные из довольно большого локального файла XML, который будет меняться только при новом развертывании.

В этом случае рекомендуется хранить документ как постоянный, например:

class Product 
  XML_DOC = Nokogiri::XML(open("#{Rails.root}/myxmlfile.xml"))
end

или для доступа к документу через метод класса, например:

class Product 
 self.xml_doc
    Nokogiri::XML(open("#{Rails.root}/myxmlfile.xml"))
  end
end

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

1 ответ

Решение

Это самая распространенная идиома:

class Product 
    def xml_doc
       @@xml_doc ||= Nokogiri::XML(open("#{Rails.root}/myxmlfile.xml"))
       return @@xml_doc
    end
end

||= оператор говорит "если переменная nil, вычислите результат выражения и сохраните его, иначе ничего не делайте ". Эта идиома называется" запоминание ".

Не думайте о константах как о способе оптимизации вашего кода, в Ruby они все равно не являются постоянными.

Другие вопросы по тегам