Метод 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 они все равно не являются постоянными.