我想用自定义行为(方法)将Nokohiri::XML::Node
对象扩展为我自己的唯一对象。在Ruby中扩展对象
我有以下对象:
class RDFNode < Nokogiri::XML::Node
def get_tag
self.at_xpath("Path/to/tag")
end
end
和节点工厂:
class RDFNodeFactory
@doc = Nokogiri::XML.parse('rdf_file.xml')
def self.get_node(id)
@doc.xpath_at("Path/to/rdf/node[@id=#{id}]")
end
end
我的问题是有关最佳做法的Ruby和基本OOP的红宝石。
我怎样才能让RDFNodeFactory.get_node("someid")
返回RDFNode
而不是Nokogiri::XML::Node
?我曾经在Java中使用类型转换,但在Ruby中我们没有。
我应该修改Nokogiri::XML::Node
类而不是将其扩展到自定义类吗?什么是更可接受的做法?
是的,我喜欢开放课,但他们有时会吓到我。对我来说,看起来如果你只是将方法添加到属于单独维护的gem的类中,那么你确实冒着破坏模块性的风险。 Nokogiri可能会更新,然后我的宝石/应用程序被打破。 这是一种合法的恐惧还是我是偏执狂? – BeMathis 2011-03-15 19:06:34
我编辑了我的答案来表达这种恐惧。 – 2011-03-15 19:15:34
添加反映您所做更改的测试对于避免打开课程时出现问题非常重要,这样一来,如果新版本的gem破坏了您的更改,您将会了解它。 – 2011-03-15 19:30:01