2011-05-02 8 views
1

몇 가지 비슷한 질문이 있지만 여기에는 답변이 없습니다.다른 컨트롤러에서 공용 기능을 호출 하시겠습니까?

어떻게하면 좋을까요?

다른 컨트롤러 클래스의 새 인스턴스를 만들 때마다 그 함수를 사용하고 싶지만 장기적으로 나쁘다고 생각 하나?

기능 (예 : UserController.GetAllUsers())을 공유해야합니까?

+0

공유 기능 인 경우 컨트롤러에 넣고 서비스 레이어 (또는 웹 인터페이스가 위에있는 레이어)에 넣지 않는 이유는 무엇입니까? – R0MANARMY

+0

음, 공유 기능이 아닙니다. 그리고 그것은 크게 userController와 관련이 있기 때문에 거기에 보관하고 싶습니다. 현재로서는 UserController 클래스의 새 인스턴스를 만들고 인스턴스를 호출하고 있습니다. – Anders

+2

그것은 * 공유 기능입니다 - 당신이 2 개의 컨트롤러에서 동일한 기능을 필요로한다는 단순한 사실이 그것을 증명합니다. 그리고, 제발, 당신이하고있는 것처럼 컨트롤러를 사용하지 마십시오. 그건 틀 렸습니다. – rsenna

답변

3

다른 컨트롤러에서이 메서드를 액세스 할 수 있도록 제안하지 않았습니다. ASP.NET MVC에서 컨트롤러는 여러 가지 다른 방법 (인젝션, 팩토리 등)으로 생성 될 수 있으며 사용되는 메커니즘을 에뮬레이션 할 수는 없습니다.

대신에 GetAllUsers 메서드를 값을 반환하는 데 필요한 매개 변수를 사용하는 별도의 클래스/메서드로 분해해야합니다. 그런 다음 두 컨트롤러에서 새 클래스에 적절한 값을 전달합니다.

클래스에는 ASP.NET MVC에 대한 지식이 없어야합니다. 컨트롤러 인스턴스에서 컨트롤러 인스턴스를 전달합니다.

+0

알았어, 고마워! 내 컨트롤러에서 볼 수없는 모든 기능을 helperClasses로 옮깁니다. 그건 괜찮 겠지? 나는 MVC를 처음 접했고, 스스로 가르쳤다. 그래서 나는이 기본 원칙 중 일부를 놓쳤을지도 모른다. – Anders

+1

@ 앤더스 : 꽤 많이 맞습니다. 컨트롤러가 쿼리 문자열이나 폼 값을 .NET 형식으로 변환하여 도우미 메서드에 전달할 가능성이 높습니다. 컨트롤러를 직접 만들고 싶지 않은 이유는 ASP.NET MVC에서 컨트롤러는 보통 'ControllerContext'로 설정되고 새 컨트롤러를 만들면 해당 정보가 올바르게 설정되지 않기 때문입니다. 헬퍼 클래스를 생성 할 때, 당신은'ControllerContext'에 대한 필요성을 없애고, 컨트롤러는'ControllerContext'와 당신의 로직 사이의 어댑터 역할을합니다. – casperOne

+0

감사합니다. casperOne! 아주 잘 설명해주었습니다. – Anders

관련 문제