2013-07-26 3 views
1

이것은 더 일반적인 질문입니다. 그리고 그것은 바보 일 수도 있습니다.하지만 저는 끊임없이이 딜레마가 있기 때문에 물어보기로했습니다.더 나은 방법이 있습니까? object 또는 object.id를 검색합니까?

나는 (중요한 점은 Rails에 있음) 큰 애플 리케이션을 작성할 때 어떤 접근 방식이 가장 좋고 더 일반적인지 궁금해했다.

def retrieve_object(id_of_someobject) 
    # Gets class object ID (integer) 
    OtherObject.where('object_id = ?', id_of_someobject) 
end 

여기 예컨대 여기가 그 클래스 오브젝트를 취득하고, 오브젝트 속성 'ID'를 트리거링하여 그 ID를 얻는다 12

id_of_someobject 또는

def retrieve_object(someobject) 
    # Gets class object 
    OtherObject.where('object_id = ?', someobject.id) 
end 

수신한다.

+1

개인적으로, 나는 개인적으로 함수 자체에 개체를 보냅니다. 보통이 방법을 사용하면 기능을 변경하고 추가 객체 변수 (id뿐 아니라)에 대한 액세스 권한이 필요합니다. 성능 현명, 나는 두 옵션이 동일하다고 생각합니다. 그래서 개인적인 취향에 따라 달라질 것이라고 생각합니다. –

답변

1

이 경우 나는 두 번째 방법을 선호합니다. 기능적으로는 동일 할 수도 있지만 오류가있는 경우 (예 : nil.id 호출) 함수 내에서 오류를 처리하면 오류 발생시 디버그하기가 더 쉽습니다.

첫 번째 접근 방식에서는 nil을 전달해도 오류가 발생하지 않고 빈 배열이 반환됩니다. 따라서 결과가 예상 한 것과 다른 이유를 아는 것이 어려울 수 있습니다. 두 번째 방법은 깃발을 던져서 오류의 위치를 ​​정확히 알려줍니다. 빈 배열을 반환하여이 케이스를 처리하려면 명시 적으로 그렇게 할 수 있습니다.

Michael이 언급했듯이 전체 개체를 전달하면 원하는 경우 다른 작업을 수행 할 수있는 유연성을 제공합니다. ID를 평가하고 객체를 인스턴스화 할 필요없이 ID를 이미 갖고 있지 않으면 메소드에 전달하는 것이 많은 이점을 얻지 못합니다. (그 첫 번째 옵션에 대한 강력한 유스 케이스가 될 것입니다)

0

둘 모두를 지원하십시오. 그것은 단 하나의 라인이며, 기억이나 신경을 쓸 필요가 없습니다.

def retrieve_object(id_or_someobject) 
    id = id_or_someobject.is_a?(SomeObject) ? id_or_someobject.id : id_or_someobject 
    OtherObject.where('object_id = ?', id) 
end 
+0

큰 팀에서나 더 빠른 처리를 위해 컨피규레이션 인수에 대한 관행에 대한 이러한 종류의 삭감은 자신과 다른 모든 사람들이 특정 방식으로 그것을하도록 강요하는 것이 좋습니다. 모든 찾기 전에 수업을 확인해야한다면 조금 불필요한 것 같습니다. – tyler

+0

@tyler 매우 사실이지만, 당신이 다른 곳의 다른 곳으로 가고 있다는 것을 알고 있었고 거기에서 확인해야 할 것입니다. 이것은 단지 그 수표를 위임합니다. 당신이 골라야한다면, ID를 고를 것입니다. 그렇게하면 someobject를 먼저로드하지 않고 retrieve_object (thirdobject.someobject_id)를 수행 할 수 있습니다. –

관련 문제