2008-11-05 4 views
7

ASP.NET MVC에서는 모든 컨트롤러에 "Controller"라는 접미사를 사용해야합니다. 이것은 불필요하게 제한적인 것처럼 보입니다. 기술적 이유가 있습니까?ASP.NET MVC에서 컨트롤러가 이름 기반으로 된 이유는 무엇입니까?

저는 대부분 궁금하지만 좀 더 유연한 명명 규칙이 코드 구성을 개선 할 수있는 상황을 볼 수 있습니다. Controller 파생 클래스를 검색하기 위해 리플렉션을 사용하여 가능한 컨트롤러 클래스를 쉽게 찾을 수 없었습니까? 또는 컨트롤러 클래스에 ControllerAttribute으로 표시해야합니까?

+0

@ shog9 : 문해력 향상에 감사드립니다. –

+0

@Augusto : 문제 없습니다. – Shog9

답변

14

MVC 커뮤니티는 Ruby on Rails의 영향을 크게받습니다.이 값은 "convention over configuration"입니다. 일관되게 일을 명명하면 응용 프로그램을 0으로 구성 할 수 있습니다.

+0

당신은 저를 때려 눕 힙니다! 링크는 다음과 같습니다. http://en.wikipedia.org/wiki/Convention_over_configuration –

+0

예. 감사. 나는 그것을 또한 움켜 잡았다. –

3

이 규칙의 장점 중 하나는 URL 세그먼트, 컨트롤러 및 모델 클래스의 이름이 모두 동일하다는 것입니다.

는 URL :/제품/ 컨트롤러 : 제품 : 컨트롤러 모델 : 제품

이 이름 충돌을 일으킬 것입니다. 그래서 우리는이 충돌을 피하기 위해 "컨트롤러"라는 접미사가 붙은 컨트롤러 이름을 사용하도록 규정했습니다. 그러나 확장 성 API를 통해이 동작을 재정의 할 수 있습니다.

+0

Actually Phil ... REST에 의해 이러한 URL 세그먼트는 콜렉션을 명명해야하는데, 컨트롤러는 일반적으로'ProductsController' (/ products/1)에서와 같이 복수형 인 반면 모델 엔티티는'Product'로 단수입니다. 콜렉션을 표시하는 콜렉션은 모델'IEnumerable '. 어쨌든 충돌은 없을 것입니다. 그러나 컨벤션은 속성, 콜렉션, 사전,리스트 등에서 (사람들이 불평하지 않고) elswhere에서도 사용되기 때문에 컨벤션은 훌륭합니다. 이러한 타입 또한 전통적으로 * 접미사를 사용합니다. 물론 개발 유용성의 이유로. –