2011-08-24 7 views
0

내가 달에 사용자를 전송하는 기본 기능이 있습니다레일 모델 컨트롤러 모범 사례

#Action in a controller 
    def outer_space 
    user = User.find(params[:id]) 
    user.board_rocket_to_the_moon 
    end 


#user model 
def board_rocket_to_the_moon 
    #put on space suit, climb in rocket, etc. 
end 

지금, 나는 그들이 여행을 좋아하는 경우에만 달에 사용자를 보내이에 추가 할를.

if 문을 컨트롤러 또는 모델에 넣는 것이 더 나은 이유는 무엇입니까?

#option 1: Put an if in the controller 
    def outer_space 
    user = User.find(params[:id]) 
    user.board_rocket_to_the_moon if user.likes_to_travel 
    end 


#option 2: Stick the if in the user model 
def board_rocket_to_the_moon 
    if self.likes_to_travel 
    #put on space suit, climb in rocket, etc. 
    return "BLAST OFF" 
    else 
    return "There is no way THIS dude is getting on THAT ship." 
    end 
end 

답변

3

SRP에 따르면, 나는 옵션 1.

컨트롤러가 지휘자로 다루고 싶어요 : 그것은 논리에 대한 책임 그리고 그것은 더 읽기입니다.

대안은 로직을 처리하고 필요한 경우 다른 메소드를 트리거하는 모델에 잘 명명 된 메소드를 작성하는 것입니다.

테스트를 잊지 마세요!

1

모델의 상태가 좋을 것입니다.

하지만 여기에는 요구 사항에 따라 다릅니다. 메서드 호출시마다 표시해야하는 경우 모델에서 필요합니다. 이 동작 호출에서만 컨트롤러에서 메시지를 표시 한 다음 조건이 양호해야합니다.