2012-07-24 5 views
3

모델이나 컨트롤러에 두 가지 메서드가 있고 메서드간에 변수를 전달하려는 경우.메서드간에 데이터를 전달할 때 적절한 방법

def foo 
    @param = 2 
    @test = 1 
    callee 
    #do something with @test 
end 

def callee 
    @test += @param 
end 

은 더 나은 사전에 그렇게

def foo 
    param = 2 
    test = 1 
    test = callee(param, test) 
    #do something with test 
end 

def callee(param, test) 
    test += param 
    test 
end 

감사처럼이 또는 일반 변수를 할 인스턴스 변수를 사용하는 것입니다!

답변

2

, 그것은 상황에 많이 의존 - "가장 코드의 의도를 보여줍니다 접근하는"당신이 요청해야하는 것입니다. 당신은 확실히 당신이 말하는 모델/컨트롤러 클래스에 대한 테스트를해야합니다. 매우 거친 가이드 라인으로

:

첫 번째 방법은 일반적으로 방법은 클래스의 공개 API의 일부입니다 때 볼과는의 징후 일 수 있지만 그것이 (클래스의 인스턴스의 내부 상태를 변경한다 코드 예제 에서처럼 공용 메소드가 연결되어 있다면 냄새가 난다.) 이것은 아마도 모델 객체에서 더 자주 보일 것이다.

두 번째 접근법은 호출하는 메소드가 일부 코드 중복을 제외시키는 개인 편의 메소드이거나 매개 변수에 매우 특수화 된 연산을 수행하여 일부 결과를 리턴하는 메소드 인 경우에 주로 나타납니다 (이 경우 아마 유틸리티 클래스로 분해 할 수 있습니다.) 이것은 모델 또는 컨트롤러 객체에서 볼 수 있습니다.

http://blog.objectmentor.com/articles/2009/02/12/getting-a-solid-start

1

귀하의 필요에 따라 다릅니다. 또한 변수를 전달할 함수의 프로토 타입도 중요합니다. 메소드가 사용자의 허가없이 매개 변수를 변경하지 않도록하려면 두 번째 구현을 사용해야합니다. 그러나, 당신이 함수를 신뢰한다면, 당신은 첫 번째 방법을 사용할 수 있습니다. 이것은 "참조로 호출"및 "값으로 호출"이라고하는 큰 주제입니다. 다음 링크를 살펴볼 수 있습니다. 이 질문에 대한 명확한 답이 없다

http://www.exforsys.com/tutorials/c-language/call-by-value-and-call-by-reference.html

+0

이 루비가 아닌 C입니다 : 그들에 대해 삼촌 밥의 기사를 살펴 여기에 한 -

당신은 유지 보수 OO 코드를 목표로하는 경우, SOLID 디자인의 원리는 아주 좋은 지침입니다 참조 별 호출/값별 호출 별 존재하지 않음 –

관련 문제