복붙노트

[RUBY-ON-RAILS] 뚱뚱한 모델 대 스키니 컨트롤러, 또는 내 컨트롤러 식욕 부진을해야 : 레일?

RUBY-ON-RAILS

뚱뚱한 모델 대 스키니 컨트롤러, 또는 내 컨트롤러 식욕 부진을해야 : 레일?

나는 비슷한 문제가 전에 대답 한 알 - 같은 :

하지만 더 구체적인 질문이 있습니다 -이 공리를해야 얼마나 멀리 : 컨트롤러의 마른 체형을 유지, 모델 지방을!

다음은 그 예이다 :

인스턴스가하지 말라의 내가 검증 데이터의 여러 소스를 말한다. 좋은 예는 VIN 번호 것 - 나는 기록에 무엇을보고 - 나는 제조업체 데이터 소스, DMV의 데이터 소스도 내 로컬 데이터베이스에 대해 그것을 확인할 수 있습니다. 내가 가진 그래서 모델은 빈과 vins_controller을했다. 모델 내부에서 나는 5 가지 방법이있다 :

특정 검사 메소드를 호출 - 지정된 소스를 기반으로 : [소스] - 액션 쇼에서 REST 내 컨트롤러 유지에서 나는 PARAMS에서 보이는 간단한 case 문이있다.

이제 여기에 질문은 : 나는 어떤 데이터 소스 다스리 컨트롤러에 전화 또는 내가 (VIN을 소스)가 모델로 이동 한 다음 컨트롤러 단지 check_vin 그런 짓을해야한다는 논리를 떠나해야 하는가?

내 컨트롤러 식욕 부진을해야 하는가?

편집하다

나는 제이 - 드세 @에서 공식적인 답변이 전환하고있어 (감사합니다 - 시간에 그것은 좋은 대답이었다). 상황이 2010 년 이후 많이 바뀌이 문제는 여전히 뷰를 얻을 - 그래서 희망이 그들을 제대로 자신의 코드를 구성 올바른 방향으로 도움의 어떤 사람들을 가리 킵니다.

선구자 보석 주소 문제가 정말 잘 질문에서 자랐다.

해결법

  1. ==============================

    1.당신은 선구자 갈 줄 것이다. 이 레일 (실제로, 모든 루비 프레임 워크 실행)의 상단에 얇은 프레임 워크, 그것은 등등 지속성 및 도메인 코드 사이의 서비스 계층, 폼 객체, 간접을 소개합니다.

    당신은 선구자 갈 줄 것이다. 이 레일 (실제로, 모든 루비 프레임 워크 실행)의 상단에 얇은 프레임 워크, 그것은 등등 지속성 및 도메인 코드 사이의 서비스 계층, 폼 객체, 간접을 소개합니다.

    정말 당신에게 쉽게 너무 많은 것을 넣을 위치를 알아낼 수 있도록 더 추상화 계층을 제공합니다 모든 소프트웨어 구성 요소 빼빼 유지하는 데 도움이됩니다.

    당신이를위한 양식 객체가있는 경우 예를 들어, 당신은 왜 컨트롤러와 모델에 유효성 검사 논리를 눌러 것인가?

  2. ==============================

    2.옛말이있다,

    옛말이있다,

    당신이 기술 한 모든 데이터의 한 조각이 서로 어떻게 관련되는지에 관한 것입니다. 자체 그들 관계에 대한 논리가 포함 유효성 검사가 모델 또는 데이터베이스 계층에 있어야 당신의 단서이다.

    식욕 부진 컨트롤러는 잘 설계 (스마트?) 데이터의 표시이다. 내 경험은 당신이 당신의 데이터를 설계에 넣어 더 많은 노력이, 당신이 가지고있는 적은 코드가 전반적으로 작성하는 것을 알려줍니다.

    컨트롤러는 해당 모델을 호출 한 다음 출력을 포맷, 구문 분석 입력에서 최고입니다.

  3. ==============================

    3.나는 TDD'ing 해요 특히, 내 모델의 논리를 둘 것 (I 그렇지 않은 경우를 제외하고, 나는 항상 TDD.) 테스트 모델은 일반적으로 훨씬 쉽게 컨트롤러를 테스트보다.

    나는 TDD'ing 해요 특히, 내 모델의 논리를 둘 것 (I 그렇지 않은 경우를 제외하고, 나는 항상 TDD.) 테스트 모델은 일반적으로 훨씬 쉽게 컨트롤러를 테스트보다.

  4. ==============================

    4.나는 책임에 대해 생각하여이 같은 질문에 접근하는 것을 좋아합니다. 이 경우 무엇이 VIN을 검증하기위한 "책임"인가? 모델. 제어기는 사용자 입력에 기초하여 "조절"할 ... 파라미터 전달해 간단하다.

    나는 책임에 대해 생각하여이 같은 질문에 접근하는 것을 좋아합니다. 이 경우 무엇이 VIN을 검증하기위한 "책임"인가? 모델. 제어기는 사용자 입력에 기초하여 "조절"할 ... 파라미터 전달해 간단하다.

    그것은 다시 사용해야 할 경우 영향을 최소한의 원인이 코드를 넣어 것입니다 : 그것은 완전히 명확하지 않으면, 그것을 이런 식으로 생각? 말 ... 두 개의 서로 다른 컨트롤러 입력 전압을 확인하기 위해 모두 필요로하는 두 개의 서로 다른 행동이 무엇을해야 할 것인지를 할 수? 당신이 컨트롤러에이 코드를두면, 당신은 기본적으로뿐만 아니라 새 컨트롤러에 복제해야 할 것,하지만 당신은 모델에 배치했다면, 당신은 단순히 새로운 컨트롤러에서 check_vin 방법 및 어떤 코드를 호출 할 것 중복이 필요하다. 그들이 가장 이해가 책임을 할당하면 코드의 재사용 성을 개선했습니다.

  5. ==============================

    5.그것은 "구문 분석"PARAMS에 컨트롤러의 책임이지만, 검증은 모델에서 수행해야합니다.

    그것은 "구문 분석"PARAMS에 컨트롤러의 책임이지만, 검증은 모델에서 수행해야합니다.

    난 컨트롤러에 이런 짓을 할 것이다 :

    @my_model = MyModel.new(:source => params[:source] ...)
    if(@my_model.valid?)
      # treat valid model here (i.e. save the model and redirect to show)
    else
      # treat validation error here (usually throw an error)
    end
    

    컨트롤러가 실제로는 그냥 "마른"입니다. 진정으로 "식욕 부진"컨트롤러를 들어, inherited_resources 또는 resource_this 좀보고 할 수 있습니다. 어떤 경우에는 이러한 전체 편안하고 스택을 구현하는 당신에게 3 선 컨트롤러를 제공 할 것입니다.

  6. from https://stackoverflow.com/questions/2550376/rails-skinny-controller-vs-fat-model-or-should-i-make-my-controller-anorexic by cc-by-sa and MIT license