2010-01-15 6 views
2

많은 수의 작업이 포함되어 있으면 컨트롤러가 커지고 다루기 힘들어 질 수 있습니다. 이것이 실제 사용에서 중요한 문제입니까? 그렇다면 완화 전략은 무엇입니까? (또는 컨트롤러 당 단순히 작업 수를 유지할만큼 충분합니까?)MVC에서 대형 컨트롤러 피하기

내 머리 꼭대기에서 일부 의미있는 휴리스틱에 따라 그룹화 된 다른 유형의 액션 구현에 논리를 오프로드하는 컨트롤러를 생각할 수 있습니다.

답변

3

"REST"칼을 충분히 공격적으로 적용하지 않으면 내 경험에 주로 영향을줍니다. 때때로 은유는 우리가 문제에 대해 생각하는 방식과 일치하지 않습니다. 예를 들어 "로그인"은 "계정"에 대한 작업이라고 쉽게 생각할 수 있지만 REST 칼을 적용하면 로그인은 실제로 "새로운 세션 시작"임을 알게되고 "새로운 세션"을 적용하여 아이디어를 뒤집을 수 있습니다 "(또는 Create) 액션을 SessionController에 추가합니다. 그런 다음 세션을 생성 및 파괴 (로그인 및 로그 아웃) 할 책임이있는 소형 컨트롤러가 있습니다.

일부 사용자는 REST 용역에 지저분한 인증 개념을 묻지 않을 것이라고 확신합니다. 따라서 더 명확한 예를 살펴 보겠습니다. BlogPost 엔티티를 가질 수 있으며 많은 의견을 가질 수 있습니다. BlogPostController에서 액션 AddComment를 갖는 대신, BlogPost에서 일반적인 작성/수정/삭제 메소드를 사용하고 BlogPostId를 예상하고 작성/수정/삭제 메소드를 구현하는 다른 컨트롤러 CommentController를 보유합니다.

나는 REST와 같은 동작이 필요없는 상황 (예 : "CSV 파일에서 X 목록 가져 오기")을 실행했습니다. 각 작업은 Y에 속합니다. "목록"은 도메인 개념으로는 정말로 중요하지 않습니다. 실제로 저는 기존의 Xes 컬렉션에 추가하려고합니다. 이 경우 필자는 XController에 "가져 오기"액션을 추가하는 약간 추한 접근 방식으로 인식합니다. 이 코드는 제 컨트롤러 중 가장 엉망인 코드입니다. 아마도 XImporter 클래스 (아마도 XImporter 클래스)를 포함하여 무언가로 그것을 분해하려고하지만, 현재는 "작동합니다". 나는 나보다 더 똑똑한 누군가가 더 나은 해결책을 가지고있을 것이라고 확신한다.

내 주장은 다음과 같습니다. 많은 RESTy 조치가없는 경우 코드 종류가 있습니다. 아마도 당신은 당신이 올바르게 통제하고있는 것을 모델링하지 않을 것입니다. 그러나 말하기를 1-3 무실푼 행동과 문제를 다시 생각해 보는 시도가 올바른 방향으로 인도하지 못하면 걱정할 필요가 없을 것입니다.

관련 문제