2011-03-06 3 views
1

나는 다음 사람만큼 좋은 마른 체형 컨트롤러를 좋아합니다.레일즈 3, 컨트롤러가 많은 세션 정보를 사용할 때 스키니 컨트롤러를 유지할 수있는 방법이 있습니까?

하지만 JSON을 통해 원격 시스템에 광범위하게 작업하고있는 응용 프로그램과 세션 변수는 광범위하게 사용됩니다 ... 각각의 작은 상호 작용은 수십 개의 컨트롤러 메소드 중 하나의 개별 히트이며 레일은 내장되어 있습니다. 세션 추적에서 모든 상태를 추적합니다.

결과적으로 컨트롤러에는 수십 개의 메소드가 있으며 각 "상호 작용"과 해당 메소드는 세션을 광범위하게 읽고 (때로는 쓰기도 함) 수행합니다.

당신이 모델 메서드에서 세션에 액세스하는 경우 끔찍한 "잘못된"작업을하고 있다는 것을 이해합니다 ... 그러나 수십 가지 컨트롤러 메서드에 대해 PER + "너무.

주어진 시나리오에서 지방 컨트롤러와 세션에 액세스하는 모델 간의 가장 좋은 절충점은 무엇입니까?

답변

1

최근에 비슷한 문제가 발생했습니다. 필자는 JSON을 허용/반환 한 원격 API에 크게 의존하는 글쓰기 및 응용 프로그램을 작성했습니다. 그 결과, 내 응용 프로그램에 매우 몇 가지 모델이 있었고 내 컨트롤러는 꽤 길었습니다.

나는 lib/에서 사용자 지정 파서 module를 작성 결국 및

다음 고려 (일반적으로 컨트롤러에 존재하는 것이 논리의 많은 처리) 모듈을 호출했다 :

module RemoteParser 
    def get_user(user_id) 
    result = ActiveSupport::JSON.parse(NetHttp.get('http://www.example.com/')) 
    session[:received_user] = true 
    end 
end 

이제 컨트롤러는 다시 마른 될 수 있습니다

class SomeController < ApplicationController 
    def index 
    @user = RemoteParser::get_user(params[:id]) 
    end 
end 
난 그냥이 믿을 수 없을만큼 contriv 것을 추가 할

그러한 용도의 예. 귀하의 요청 사항 등에 관한 추가 정보를 제공하면, 귀하를 더욱 도울 수 있습니다.

+0

깔끔한 해결책입니다. 감사합니다! – jpwynn

관련 문제