2011-07-28 4 views
4

레일즈는 MVC 패러다임을 사용합니다. 모델, 뷰 및 컨트롤러에서 흥미 롭습니다. 실제로 컨트롤러에만 '응용 프로그램'또는 상위 컨트롤러가 있습니다. 실제로 레일에 application_helper가 있지만 실제로 많은 일을하지는 않습니다. 모델과 실습 도우미에서 부모가없는 application_controller 만 있으면됩니까?MVC 패러다임. 왜 application_controller인가?

+2

흥미로운 토론이 시작되었습니다. +1 – apneadiving

답변

4

모델에는 부모가 있습니다. ActiveRecord :: Base ApplicationController는 너무 일반적이어서 인증/권한 부여 등을 위해 웹 응용 프로그램에 필요한 응용 프로그램 전체 필터를 볼 수 있기 때문에 있습니다. 응용 프로그램 도우미는 다시 도우미 메서드 하나의 컨트롤러 범위를 넘어 애플리케이션 전반에 걸쳐 사용됩니다.

+0

Active :: Record는 부모보다 mixin에 가깝다고 생각합니다. – s84

3

모델은 응집력이 있으며 MVC 프레임 워크에서 가장 독립적 인 엔티티라고 가정합니다. 이런 맥락에서, Model vs Controller를 비교하는 것은 좋지 않습니다.

도우미는보기를 지원하는 항목입니다. 예를 들어, 다른 뷰에서 재사용 할 수있는 뷰 내에 레일 코드의 일부를 작성하게 될 수도 있습니다. 이러한 시나리오의 경우 도우미가 구조에 나옵니다.

컨트롤러는보기와 기본 모델을 이상적으로 말해야하는 컨트롤러입니다. 논리적으로 모든 컨트롤러의 부모가 있어야하며이를 수행 할 애플리케이션 컨트롤러가 있어야합니다.

그리고 레일스 MVC 프레임 워크의 모든 클래스에는 부모가 있습니다. - ActiveRecord :: Base는 모델의 부모이며, ActionController :: Base는 컨트롤러의 부모입니다. 헬퍼는 뷰를위한 것이므로 적어도 명시 적으로는 부모가 없습니다.

1

레일에 대해 일반적 MVC의보다 구체적으로는 모든 일반 컨트롤러에 공통으로 취급 한 바와 같이

일반 컨트롤러, 유익한, 상기 특정 제어기 전에 행한다. 모델이 혜택을 누릴 수있는 몇 가지 일반 속성이있을 수 있다는 점에서 모델에도 동일하게 적용됩니다. 이것은 일반적으로 상속에 의해 더 잘 수행 될 수 있습니다. 상속에서 모델은 "응용 프로그램 모델"을 상속합니다.

따라서 일반 컨트롤러는 볼 수 있지만 모델은 볼 수 없습니다. 이미 모델에서 일반적인 동작을 얻는 방법이 있지만 contollers에서는 그렇지 않습니다.

관련 문제