다른 컨트롤러에서 컨트롤러 기능을 호출하는 것이 좋습니다?


23

하나의 컨트롤러에서 검색 논리를 처리하고 검색을 기반으로 일부 데이터를 생성하고 통계로 반환하는 경우가 있습니다.

다른 컨트롤러에서 컨트롤러 기능을 호출하는 것이 좋습니다? 아니면 두 컨트롤러가 절대 '토론'해서는 안됩니까?

답변:


24

대답은 사용하는 언어 / 프레임 워크에 따라 다르지만 다소 이상합니다. 언어 / 프레임 워크마다 MVC에 대한 접근 방식이 다릅니다.

일반적으로 다음과 같은 이유로 다른 컨트롤러를 사용하지 않습니다.

  • 컨트롤러는 일반적으로 MVC 프레임 워크에서 사용하려는 형식의 결과를 반환합니다. 이 결과에는 호출자로서 필요하지 않은 많은 정보 (예 : 뷰 이름)가 포함되어 있으며 관심있는 정보를 쉽게 얻을 수있는 것은 아닙니다 (귀하의 경우 내가 맞다면 모델).

  • 컨트롤러는 종종 HTTP 요청 및 컨텍스트에 대한 정보가 필요하기 때문에 비즈니스 코드에서 초기화하기가 쉽지 않습니다. 이 모든 정보는 MVC 프레임 워크에 의해 전달 될 것으로 예상됩니다.

더 중요한 것은 두 컨트롤러에 여러 검색 결과가 필요한 경우 하나는 최종 사용자에게 결과를 표시하고 다른 하나는 통계를 생성하는 컨트롤러로 비즈니스 로직에 검색 로직을 넣는 것입니다. ) 컨트롤러를 최대한 작게 유지하십시오.

MVC에서 컨트롤러의 역할은 프로세스를 조정하는 것입니다.

  • 요청에서 관련 정보를 얻습니다.
  • 입력을 검증 / 위생하는 작업을 검증 자에게 위임
  • 비즈니스 계층의 관련 방법을 호출
  • MVC 프레임 워크에 결과 모델과 뷰를 제공하십시오.

컨트롤러의 역할은 비즈니스 로직을 다루지 않습니다.

코드가 비즈니스 계층으로 이동 한 후에는 한 컨트롤러를 다른 컨트롤러에서 사용하는 것과 달리 명확하고 간단한 방식으로 재사용 할 수있는 검색 인터페이스를 제공 할 수 있습니다.


안녕하세요, 답변 감사합니다. 검색 로직을 비즈니스 계층으로 이동했다고 가정하면 검색 인터페이스를 배치하기에 가장 좋은 장소는 어디입니까? Laravel을 사용하고 있습니다.
IAmJulianAcosta

불행히도, 나는 Laravel을 사용한 적이 없습니다. 또한 대답은 프레임 워크가 아닌 응용 프로그램의 아키텍처에 더 달려 있다고 생각합니다.
Arseni Mourzenko

루트 프로젝트와 정확히 동일한 수준의 http 폴더에 있다고 가정합니다. 계약이라는 폴더와 여기에 배치 할 수있는 인터페이스 역할을하는 모든 파일을 만들 수 있습니다.
Faris Rayhan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.