2013-04-09 2 views
2

asp.net webforms 개발자 였을 때 나는 기본 페이지를 생성하는 데 익숙해졌으며 일반적인 방법과 응용 프로그램에 사용되는 속성을 넣었습니다. 그러면 모든 페이지가 해당 페이지를 상속합니다.기본 컨트롤러에 대한 유용한 정보

mvc 4에서 수행하는 방법에 대해 궁금하거나 모든 지침이 있습니까? 아니면 기본 컨트롤러 클래스를 만들고 해당 클래스의 모든 컨트롤러를 상속합니까?

보통 기본 컨트롤러 클래스에 무엇을 넣으시겠습니까?

감사합니다.

답변

2

나는 냄새가 나기 때문에이 문제에 대해 기본 컨트롤러 (상속)를 사용하지 마십시오. 컨트롤러에 일반적인 메서드와 속성이 모두 필요합니까? 적어도 일부 기능은 컨트롤러 유형의 확장 메소드로 구현할 수 있습니다.

또한 다른 기능이 컨트롤러에 주입되는 서비스로 더 적합 할 수 있습니다. 일부 (요청) 상태가 필요한 일반적인 방법의 경우 서비스 접근 방식을 선호합니다.

적어도 일부 기능이 작업 필터 (권한 검사, 일부 사용자 프로필 설정, 예외 처리 등)에 속할 수도 있습니다.

엄지 손가락 규칙으로, 내 컨트롤러에서 상속을 사용하지 않도록 노력하고 있습니다. 컨트롤러는 가능한 한 간단해야하고 필자가 필요로하는 모든 유틸리티 동작이 있어야합니다. 위에서 제시된 방법 중 하나로 캡슐화하려고합니다.

+0

저는 컨트롤러 유형의 확장 메소드에 대한 아이디어를 정말 좋아합니다. 그러나 나는 컨트롤러와 액션 필터에 주입 된 서비스의 개념을 이해하지 못하고있다. 컨트롤러 상속에 관해서는 Basecontroller를 만들고 LogException으로 로그온하는 OnException 메서드를 무시하는 아이디어가 마음에 들었습니다. 기본 컨트롤러를 사용하지 않고도 모든 예외를 쉽게 로그 할 수 있다고 생각하지 않습니까? –

+0

기본 컨트롤러에서 onexception에 대한 로깅에 대해 어떻게 생각하십니까? 내가 위에서 언급 한대로 –

+0

Asp.net mvc에는 기본적으로 모든 컨트롤러에 사용할 수있는 HandleErrorAttribute가 있습니다. 하위 클래스를 사용하여 고유 한 예외 속성을 만들고 OnException을 재정 의하여 Nlog를 사용하여 로그인 할 수 있습니다. Btw, 컨트롤러는 자동으로 asp.net mvc에서 IExceptionFilter입니다. – MikeSW

1

정말 그렇게하는 습관은별로 없습니다. 수년간의 웹 양식에서 온 많은 사람들이 이런 식으로 생각합니다.

꽤 큰 응용 프로그램에서는 BaseController을 만들었지 만 일반적인 동작을 캡슐화하는 방법을 실제로 볼 수 없었습니다. 당신이 캡슐화 할 수 있습니다 당신이 코드를 볼 경우 :

그러나, 결국 우리는

그래서 나는 당신으로 가야한다 생각 기본 컨트롤러에 OnException 방법을 재정 의하여 예외를 기록 할 수있는 몇 가지 일반적인 코드를 넣어 않았다 , do. 기본 컨트롤러 내에서 개인 메서드를 만들 수 있습니다 그러나 기본 컨트롤러에서 일반적인 작업 메서드를 만들 수 없습니다. 보호 된 메소드에 코드를 캡슐화하기 만하면 구체적인 컨트롤러에 개별 Action 메소드가 필요하다.

관련 문제