Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的普通旧对象?_Ruby_Oop_Pojo - Fatal编程技术网

Ruby中的普通旧对象?

Ruby中的普通旧对象?,ruby,oop,pojo,Ruby,Oop,Pojo,我注意到在Ruby中,供应商API将结果作为数组传回是非常常见的?普通的旧对象(比如Java中的POJO)不应该更像一个标准吗如果我编写自己的库,我不应该使用POJOs POROs吗?我认为数组和对象是一种错误的二分法 当API调用返回不止一个事物时,它是以数组的形式出现的(数组是一个相当简单的对象,因此在Ruby中可以说是一个“PORO”),这是完全合理的 编辑:回应您的评论: 您引用的示例()返回不同项的数组。我同意这不一定是返回数据的最佳格式。在这种情况下,我会认为一个具有合理命名键的散列

我注意到在Ruby中,供应商API将结果作为数组传回是非常常见的?普通的旧对象(比如Java中的POJO)不应该更像一个标准吗如果我编写自己的库,我不应该使用POJOs POROs吗?

我认为数组和对象是一种错误的二分法

当API调用返回不止一个事物时,它是以数组的形式出现的(数组是一个相当简单的对象,因此在Ruby中可以说是一个“PORO”),这是完全合理的

编辑:回应您的评论:

您引用的示例()返回不同项的数组。我同意这不一定是返回数据的最佳格式。在这种情况下,我会认为一个具有合理命名键的散列将是一个更好的结构


正如John Topley所说,Ruby的OO特性意味着人们不必发明“PORO”这样的术语,因为散列非常简单。

这些结果数组包含什么?答案是在Ruby中它们包含对象,因为Ruby中的所有东西都是对象

Java世界中的POJO是对企业Java(例如EJB)给世界带来的一些复杂性的一种反应。引用创造这个词的马丁·福勒的话:

“我们想知道为什么人们会这样 反对在其应用程序中使用常规对象 并得出结论认为 因为简单的物体缺乏想象力 名字,所以我们给了他们一个 很受欢迎。”


幸运的是,在Ruby中,人们总是很自然地只练习面向对象编程,而不需要在其周围发明术语。

我个人在我写的几乎所有不是完全一次性脚本的东西中都使用POROs

我发现自己经常创建一个数据持有者类型的类,该类将管理和持有我特定类型的多个对象,并包含一些助手方法。当其他人也必须使用我的代码时,我发现这很方便


我认为这个问题很主观,因为没有一个答案总是正确的。有时仅仅传回一个数组就可以了,不需要创建额外的类。有时,额外的抽象级别会让用户更清楚一些。

始终都是对象。关键是返回的对象是否具有与其相关联的行为。这样做很好:

  def read_first_and_last_name(data_source)
    [data_source.read_string, data_source.read_string]
  end
但是当你发现有与这些数据项相关的行为时

  def print_name(first_name, last_name)
    puts "#{first_name} #{last_name}"
  end

  def read_and_print_name
    first_name, last_name = read_first_and_last_name(data_source)
    print_name(first_name, last_name)
  end
…那么它们应该是一个类:

  class FullName

    def FullName.read(data_source)
      FullName.new(data_source.read_string, data_source.read_strng)
    end

    def initialize(first_name, last_name)
      @first_name = first_name
      @last_name = last_name
    end

    def print
      puts "#{@first_name} #{@last_name}"
    end

  end
通过对名称的行为进行良好封装,使用变得非常简单:

  def read_and_print_name
    FullName.read(data_source).print
  end

否,因为您需要参考API文档来确定在哪个位置传回哪个值。如果它位于自定义对象中,您就不必再引用rdoc了。您实际上是指在数组的预定义点上有不同类实例的数组吗?你能链接到你所指的这类事情的一个例子吗。。。。我现在明白了,这些函数似乎会受益于返回自定义对象,而不是返回arrayOk中数量可变的字符串。在这种情况下,我认为使用具有合理命名键的散列将是一种改进。我想我真正想问的是,是否有更好的方法返回命名属性,以及为什么没有更多地使用它,所以也许我应该重新问这个问题!一个原因可能是像HTTParty这样的Gems使得用Ruby包装Web服务变得非常容易,并且免费获得一个围绕返回的JSON或XML的轻量级对象包装器。这正是我想知道的。谢谢你的加入。我不认为这是主观的,因为我试图看到别人做什么,并考虑到所有这些对我自己的启迪。。。