문제

Ruby에서는 공급 업체 API가 결과를 배열로 전달하는 것이 매우 일반적입니까? 평범한 오래된 물체 (Java의 Pojos와 같은)가 표준에 더 가깝지 않아야합니까? 내 자신의 도서관을 작성하면 사용해서는 안됩니다 포조스 포로?

도움이 되었습니까?

해결책

그것은 항상 모든 대상입니다. 핵심은 반환되는 객체가 그들과 관련된 행동을 가지고 있는지 여부입니다. 이것을하는 것은 괜찮습니다.

  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 호출이 하나 이상의 물건을 반환하고 배열의 형태 인 경우 완벽하게 합리적입니다 (어쨌든 배열은 상당히 간단한 개체이므로 어쨌든 루비에서 '포로'입니다).

편집 : 귀하의 의견에 대한 응답으로 :

인용 한 예 ( http://github.com/cjheath/geoip ) 다른 항목 배열을 반환합니다. 이것이 반드시 데이터를 반환하는 가장 좋은 형식이 아니라는 데 동의합니다.이 경우 현명하게 명명 된 키를 가진 해시가 더 나은 구조라고 생각했을 것입니다.

John Topley가 말했듯이, 루비의 OO 특성은 사람들이 'Poro'와 같은 용어를 발명 할 필요가 없다는 것을 의미합니다. 해시는 당신이 얻을 수있는만큼 단순합니다.

결과의 배열에는 무엇이 포함되어 있습니까? 대답은 루비에는 Ruby의 모든 것이 대상이기 때문에 물건이 포함되어 있다는 것입니다.

Java 세계의 Pojos는 Enterprise Java EG EJBS가 세계에 가한 복잡성에 대한 반응이었습니다. 이 용어를 만들어 낸 Martin Fowler를 인용하자면 :

"우리는 왜 사람들이 시스템에서 일반 물건을 사용하는 것에 반대하는지 궁금해하고 단순한 물건에 멋진 이름이 부족했기 때문이라고 결론을 내 렸습니다. 그래서 우리는 그들에게 하나를 주었고, 매우 훌륭하게 붙잡 혔습니다."

다행스럽게도 루비에서는 사람들이 그 주위의 용어를 발명 할 필요없이 객체 지향 프로그래밍을 연습하는 것이 자연스럽습니다.

나는 개인적으로 내가 쓰는 거의 모든 것에 대해 포로를 사용합니다.

나는 종종 내 특정 유형의 여러 객체를 관리하고 보유하고 일부 도우미 방법을 포함하는 데이터 홀더 유형의 클래스를 만들고 있습니다. 다른 사람이 내 코드를 사용해야 할 때 편리하다고 생각합니다.

나는이 질문이 항상 옳은 대답이 없다는 의미에서 매우 주관적이라고 생각합니다. 때로는 배열을 다시 통과하는 것이 좋으며 추가 클래스를 만들 필요가 없습니다. 때로는 추가 추상화 수준이 사용자에게 훨씬 더 명확하게 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top