2016-08-24 10 views
1

(터미널 또는 레일 콘솔에서) 객체를 볼 때, 어떻게 그것이 PORO인지 아닌지를 결정할 수 있습니까?개체가 PORO인지 여부를 어떻게 확인할 수 있습니까?

나는 그것이 단지 Ruby (Rails에 의존하지 않는다)라는 것을 이해한다. 그러나 나는 실용적인 의미로 이해하지 못합니다.

예를 들어 puts @a_form.inspect을 콘솔에 인쇄 할 때 PORO입니까?

#<AForm:0x007fdbf9b33468 @a=#<A id: 1,... 

나는 인터넷 검색을 많이 해봤지만 비 PORO 객체에 비교 예제와 함께 간단한 답을 발견하지 않았습니다.

누구나 실용적인 비교를 할 수 있습니까?

매우 초보자 용 질문 인 경우 미리 사과하십시오.

답변

2

"평범한 오래된 루비 객체"가 모든 것으로서 실제로 존재하지는 않습니다. 문자 그대로 모든 것이 객체이기 때문에 "일반"개념이 없습니다. 비표준을 어떻게 정의하겠습니까?

단순한 객체 프리미티브가있는 자바 스크립트와 다른 점은 ES6 class 구문을 사용하여 공식적으로 선언 된 것입니다. 컨테이너로 전달되는 JavaScript 객체는 일반적인 패턴입니다. Ruby에서 상응하는 요소는 잠재적으로 중첩 된 요소가있는 해시와 같은 복잡한 데이터 구조를 전달하는 것입니다.

당신이 객체의 클래스를 알고 싶다면 :

@a_form.class 

이이 상속 무엇을 알고 싶은 경우 :

@a_form.superclass # Immediate parent 
@a_form.class.ancestors # All base classes and mixin modules 

익명 클래스 루비이 있으며, 그 만든을 Class.new과 함께 생성되며 그 객체로 생성 된 객체는 얻을 수있는만큼 평범하지만 여전히 최상급 객체입니다.

2

PORO (Plain Old Ruby Object의 약자)와 PORO가 아닌 것은 기술적 인 것이 아닙니다. 모든 객체는 기술적으로 Ruby 객체입니다

대신에 PORO라는 용어는 Rails와 같은 논리에 대해 ActiveRecord 모델과 같이 "크고" "복잡한"객체를 사용하는 경향이있는 Rails와 같은 대규모 프레임 워크에 대해 종종 사용됩니다. 이러한 대형 객체는 많은 양의 논리 및 정의 된 동작을 포함하는 경향이 있습니다.

PORO에 대해 이야기 할 때, 일반적으로 PORO는이 큰 개체와 차별화되고 더 작은 특정 클래스/개체를 사용하여 비즈니스 논리를 구축하도록 권장합니다. ActiveRecord 모델은 일반적으로 기내 데이터 만 포함하고 비즈니스 논리 (일반적으로 응용 프로그램의 동작)를 정의하기 때문에 이러한 객체는 안정적인 저장소에 의해 백업 될 필요가없는 경우가 많습니다.

다시 말하지만, 기술적 인 구분이나 경계가 명확한 기술적 구분이 아닙니다. 그것은 일반적으로 단일 틀 밖에서 사고를 장려하는 것을 목표로하는 사회적 구별이다.

용어 자체에 관해서는 비교적 실제적으로 전혀 의미가없는 비교적 새롭고 (아마 지금까지 추측 했음). 대규모 레일 애플리케이션이 요즘 가지고있는 경향이있는 구조 (린 컨트롤러, 뚱뚱한 모델)에 대해 불평하는 사람들, 즉 전체 비즈니스 로직을 ActiveRecord 모델로 불평하는 사람들이 최근 인기를 얻었습니다.따라서이 용어는 대부분이 지방 모델과 구분됩니다.

관련 문제