복붙노트

[RUBY-ON-RAILS] 모델, 뷰, 컨트롤러 및 도우미 레일 : 무슨 일이 어디에 간다?

RUBY-ON-RAILS

모델, 뷰, 컨트롤러 및 도우미 레일 : 무슨 일이 어디에 간다?

(일반적으로 또는 MVC) 레일 개발에 루비에서 무엇을 빠른 규칙 나는 논리를 넣어하는 곳으로 따라야합니다.

긍정 답변 해주세요 - 음주 여기를 넣어 함께, 음주 것을 거기에 넣지 않고보다.

해결법

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

    1.MVC

    MVC

    컨트롤러 : 여기에 넣어 코드가, 결국 요청에 컨트롤러 보이는 등 특정 데이터를 볼 수 있는지, 그들이 로그인 여부 운동, 사용자가 원하는 것을 운동, 그들을 제공하는 것을 결정과 관련이있다 하고 보여주고 무엇을 렌더링 할 뷰에있는 데이터 (모델) 밖으로 작동합니다. 당신이 코드가 컨트롤러에 가야 여부에 대한 의문이 있다면 그것은 아마 안된다. 당신의 컨트롤러 마른 체형을 유지합니다.

    보기 :보기에만 데이터 (모델)을 표시하는 최소 코드를 포함한다, 그 처리 또는 연산을 많이 수행하지 않아야는 데이터 계산 (또는 요약) 모델에 의해 또는 컨트롤러로부터 생성을 표시한다. 당신보기 정말이 모델 또는 컨트롤러에 의해 수행 될 수 없다 처리 할 필요가있는 경우, 도우미의 코드를 넣습니다. 뷰에서 루비 코드의 많은 페이지를 읽기 어려운 마크 업합니다.

    모델 : 데이터에 관련된 모든 코드 (귀하의 사이트를 구성하는 개체는 예를 들어, 사용자, 포스트, 계정, 친구 등)이 사는 곳 귀하의 모델이되어야한다. 코드 요구에 저장할 경우, 엔티티와 관련 업데이트 나 대한 요약 데이터는 여기에 넣어. 그것은 재사용 가능한 사용자의 뷰와 컨트롤러를 통해 될 것입니다.

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

    2.pauliephonic의 답변에 추가하려면 :

    pauliephonic의 답변에 추가하려면 :

    도우미 : 기능은 쉽게보기를 생성 할 수 있습니다. 당신은 항상 그들의 가격을 표시하는 위젯의 목록을 통해 반복하는 경우 예를 들어, (실제 디스플레이에 대한 부분과 함께) 헬퍼에 넣어. 당신이보기를 어지럽히고 싶지 않아 RJS의 조각이있는 경우 또는 헬퍼에 넣어.

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

    3.MVC 패턴은 정말에만 UI와 아무것도 염려된다. 이 뷰가 아닌 논리를 제어하는대로 컨트롤러에서 복잡한 비즈니스 로직을 넣으면 안됩니다. 제어기는 적당한 뷰를 선택하면 그 자체 관계 및 도메인 모델 (모델) 또는 비즈니스 계층보다 복잡한 재료를 위임한다.

    MVC 패턴은 정말에만 UI와 아무것도 염려된다. 이 뷰가 아닌 논리를 제어하는대로 컨트롤러에서 복잡한 비즈니스 로직을 넣으면 안됩니다. 제어기는 적당한 뷰를 선택하면 그 자체 관계 및 도메인 모델 (모델) 또는 비즈니스 계층보다 복잡한 재료를 위임한다.

    도메인 기반 설계는 일반적으로 모델 클래스에 속해 자연적으로하지 않는 논리를 의미 객체의 여러 유형의 수를 조율해야하는 논리를 고수 장소입니다 서비스의 개념을 가지고있다.

    나는 일반적으로 내 응용 프로그램의 API와 서비스 레이어 생각합니다. 내 서비스 레이어는 보통 내가 이렇게 층이 더 복잡한 상호 작용을 단순화 역할을하는 서비스 내 응용 프로그램의 낮은 수준에서 발견 만드는거야 응용 프로그램의 요구 사항에 매우 밀접하게 매핑, 즉 당신은 서비스 레이어를 우회 같은 목표를 달성 할 수 하지만 당신은 그것을 작동하도록 더 많은 레버를 당겨해야 할 것이다.

    여기 레일 내가 특정 문제를 해결하는 일반적인 건축 양식에 대해서 이야기하고 얘기가 아냐 있습니다.

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

    4.여기에 완벽한 설명은 이미 결론 쉬운 하나 개 매우 간단한 문장을 기억하기 :

    여기에 완벽한 설명은 이미 결론 쉬운 하나 개 매우 간단한 문장을 기억하기 :

    http://c2.com/cgi/wiki?ModelViewController

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

    5.레일즈 방법은 마른 체형의 컨트롤러와 지방 모델을 가지고하는 것입니다.

    레일즈 방법은 마른 체형의 컨트롤러와 지방 모델을 가지고하는 것입니다.

  6. ==============================

    6.컨트롤러의 인증 / 액세스 제어에 관한 넣어 물건을 수행.

    컨트롤러의 인증 / 액세스 제어에 관한 넣어 물건을 수행.

    모델은 데이터에 대한 모든이다. 검증, 관계, CRUD, 비즈니스 로직

    뷰는 데이터를 표시하려고합니다. 표시 만 입력을 받고.

    컨트롤러는 데이터보기 (어느보기) 및보기에서 모델로 모델에서 어떤 일이 일어나는지 제어에 대한 있습니다. 컨트롤러는 모델없이 존재할 수 있습니다.

    나는 당신에게 당신이 창구 (보기) 질문을 적절한 카운터 고객 (요청)을 지시하는 경비원 / 접수와 컨트롤러의 생각하고 싶다. 텔러 (보기) 다음가는 당신이 보지 못할 사람, 관리자 (모델)에서 답을 얻을 수 있습니다. 그런 다음 요청을 경비원 / 접수 (컨트롤러)로 돌아가서 기다릴 당신은 당신에게 관리자 (모델) 다른 창구의 (보기) 질문에 대한 응답으로 그들에게 답을 알려줍니다 또 다른 창구 (보기)를 이동하도록 지시 할 때까지 .

    그런 다음 창구 (보기) 뭔가를 말하고 싶은 경우 마찬가지로 대부분 같은 일이 관리자가 귀하의 정보를 접수 여부를 알려줍니다 두 번째 창구를 제외하고 발생합니다. 당신이 정보를 그 관리자에게 신고 할 수있는 권한이 없습니다 된 이후 경비원 / 접수 (컨트롤러) 하이킹을 할 수 말했다 않았을 수도 있습니다.

    그래서 비유를 확장, 내 틀에 박힌와 비현실적인 세계에서, 창구 (뷰) 꽤 있지만 빈 머리와 자주 경비원 / 접수가 최소한 정중하지만 매우 지식이 아니지만 그들이 알고, 그들에게 아무것도 믿을 곳 사람들이해야하고 가서 관리자는 정말 못생긴와 의미하지만, 모든 것을 알고 무엇이 사실이고 무엇이 아니다 말할 수는 안된다.

  7. ==============================

    7.제대로 분리하는 데 도움이 한가지는 안티 패턴 "보기 컨트롤러에서 로컬 변수를 통과"피할 수있다. 대신이의는 :

    제대로 분리하는 데 도움이 한가지는 안티 패턴 "보기 컨트롤러에서 로컬 변수를 통과"피할 수있다. 대신이의는 :

    # app/controllers/foos_controller.rb:
    class FoosController < ApplicationController
    
      def show
        @foo = Foo.find(...)
      end
    
    end
    
    #app/views/foos/show.html.erb:
    ...
    <%= @foo.bar %>
    ...
    

    도우미 방법으로 사용할 수있는 게터로 이동하십시오 :

    # app/controllers/foos_controller.rb:
    class FoosController < ApplicationController
    
      helper_method :foo
    
      def show
      end
    
      protected
    
      def foo
        @foo ||= Foo.find(...)
      end
    
    end
    
    #app/views/foos/show.html.erb:
    ...
    <%= foo.bar %>
    ...
    

    이것은 쉽게 "@foo"에 넣고 그것을 어떻게 사용 얻을 무엇을 수정할 수 있습니다. 그것은 그들이 더 이상 복잡하지 않고 컨트롤러와 뷰 사이의 분리를 증가시킨다.

  8. ==============================

    8.음, 일종의 논리가 처리해야 무엇에 따라 달라집니다 ...

    음, 일종의 논리가 처리해야 무엇에 따라 달라집니다 ...

    종종, 그것은 작은 컨트롤러를 떠나, 당신의 모델에 더 많은 일을 밀어 의미가 있습니다. 이 논리는 쉽게 어디서나 사용할 수 있다는이 보장하지만 당신은 당신의 모델이 나타내는 데이터에 액세스해야합니다. 뷰는 거의 로직을 포함해야합니다. 그래서 정말, 일반적으로, 당신은 당신이 자신을 반복하지 않도록를 만들기 위해 노력한다.

    또한, 구글의 빠른 비트가 어디에서 어떤 일이 일어 나는지의 몇 가지 더 구체적인 예를 보여준다.

    모델 : 검증 요구 사항, 데이터 관계는, 이러한 방법뿐만 아니라 일반 버전을 가져야한다는 방법 (메모를 찾을 방법을 파괴, 방법, 업데이트 방법을 만들 수 있지만 뭔가가 있다면 당신은 빨간색을 가진 사람을 찾는처럼 많이하고 있습니다 당신이해야 할 모든이 find_redH_by_name ( "스미스") 또는 뭔가를 호출 할 수 있도록 성으로 머리에, 당신은 그 논리를 추출한다)

    보기 : 이것은 데이터의 데이터하지 처리를 포맷에 대한 모든 것을해야합니다.

    컨트롤러 : 데이터 처리가 진행하는 곳이다. 인터넷에서 "컨트롤러의 목적은에 떨어져, 최종 형태로 요청 된 데이터를 통과 한 후 상호 작용 모델로, 데이터를 처리, 사용자가 설정 한 모든 매개 변수를 사용하고, 사용자가 요청한 조치에 응답하고 전망."

    희망이 도움이.

  9. ==============================

    9.간단히 말해서, 일반적으로, 모델 테이블 (들)에 관련된 모든 코드들은 단순하거나 복잡한 관계를 (SQL 쿼리는 여러 테이블을 포함하는 그들을 생각하는) 것, 데이터 / 변수의 조작은 비즈니스 로직을 사용하여 그 결과에 도달합니다.

    간단히 말해서, 일반적으로, 모델 테이블 (들)에 관련된 모든 코드들은 단순하거나 복잡한 관계를 (SQL 쿼리는 여러 테이블을 포함하는 그들을 생각하는) 것, 데이터 / 변수의 조작은 비즈니스 로직을 사용하여 그 결과에 도달합니다.

    컨트롤러 코드가됩니다 / 작업에 대한 관련 모델에 대한 포인터를 요청했다.

    뷰는 사용자 입력 / 상호 작용을 인식하고 그 결과 응답을 표시합니다.

    이들의 주요 편차는 그 부분에 불필요한 부담을 줄 것이며, 전체 애플리케이션 성능에 영향을받을 수 있습니다.

  10. ==============================

    10.테스트, 테스트 ... 모델에서 가능한 한 많이 논리로 넣어 당신은 제대로 테스트 할 수 있습니다. 단위 테스트는 데이터와이 모델을 테스트하여 형성되는 방법을 테스트하고 그것의 경우를 제외하고 데이터의 무결성을 테스트 할 수있는 다음 있도록 기능 테스트, 그것은 컨트롤러를 테스트하여 라우팅 또는 제어 방법을 테스트 모델.

    테스트, 테스트 ... 모델에서 가능한 한 많이 논리로 넣어 당신은 제대로 테스트 할 수 있습니다. 단위 테스트는 데이터와이 모델을 테스트하여 형성되는 방법을 테스트하고 그것의 경우를 제외하고 데이터의 무결성을 테스트 할 수있는 다음 있도록 기능 테스트, 그것은 컨트롤러를 테스트하여 라우팅 또는 제어 방법을 테스트 모델.

    제이

  11. from https://stackoverflow.com/questions/60658/rails-model-view-controller-and-helper-what-goes-where by cc-by-sa and MIT license