전면 컨트롤러
Front controller전면 컨트롤러 소프트웨어 설계 패턴은 여러 패턴 카탈로그에 나열되어 있으며 웹 애플리케이션 설계와 관련되어 있습니다.웹 애플리케이션 개발자가 코드 중복 없이 유연성과 재사용을 실현하는 데 유용한 구조인 "웹 사이트에 대한 모든 요청을 처리하는 컨트롤러"[1]입니다.
설명
전면 컨트롤러는 웹 응용 프로그램에서 워크플로우를 구현하기 위해 자주 사용됩니다.엄밀하게 필수는 아니지만 각 페이지가 네비게이션을 담당하도록 하는 것보다 전면 컨트롤러에서 관련된 페이지 세트(예를 들어 온라인 구매에 사용되는 여러 페이지)의 네비게이션을 제어하는 것이 훨씬 쉽습니다.
프론트 컨트롤러는 Java 오브젝트로 구현되거나 웹 세션의 모든 요청에서 호출되는 PHP, Raku, Python 또는 Ruby와 같은 스크립트 언어로 구현될 수 있습니다.이 스크립트(예: index.php)는 세션 처리, 캐시, 입력 필터링 등 응용 프로그램 또는 프레임워크에 공통적인 모든 작업을 처리합니다.그런 다음 특정 요구에 따라 필요한 특정 작업을 처리하기 위해 추가 개체 및 호출 메서드를 인스턴스화합니다.
전면 컨트롤러 대신 로그인과 같은 개별 스크립트를 사용할 수 있습니다.php 및 order.php는 각각 요청 유형을 충족합니다.각 스크립트는 모든 작업에 공통적인 코드 또는 개체를 복제해야 합니다.그러나 각 스크립트는 필요한 특정 작업을 구현할 수 있는 유연성을 가질 수도 있습니다.
예
다음과 같은 몇 가지 웹 계층 애플리케이션 프레임워크가 전면 컨트롤러 패턴을 구현합니다.
- 아파치 스트럿스
- ASP.NET MVC
- Adobe Flex의 Cairngorm 프레임워크
- Raku의 Cro [1] 또는 Bayador [2] 프레임워크
- 드루팔
- MVC 프레임워크는 PHP로 작성되었습니다.예를 들어 Yii, CakePHP, Laravel, Symfony, CodeIgniter 및 Laminas입니다.
- 스프링 프레임워크[2]
- Haskell로 작성된 Yesod(웹 프레임워크)
실행
전면 컨트롤러 패턴을 보다 잘 이해하기 위해 [3]Java에서 전면 컨트롤러를 구현하는 예를 들어 보겠습니다.다음 3가지 컴포넌트로 정의할 수 있습니다.
- XML 매핑: 요청 처리를 처리하는 클래스에 요청을 매핑하는 파일입니다.
- 요청 프로세서: 요청 처리(및 적절한 모델 수정 또는 검색)에 사용됩니다.
- Flow Manager: 먼저 요청과 처리 출력을 얻은 후 다음 페이지에 표시할 내용을 결정합니다.
참가자와 책임
컨트롤러 | 디스패처 | 도우미 | 보다 |
---|---|---|---|
컨트롤러는 사용자가 시스템에서 요청을 처리하기 위한 입구입니다.도우미를 위임하거나 연락처 검색을 시작하는 역할을 함으로써 인증을 실현합니다. | 디스패처는 뷰 출력을 탐색하고 관리하는 데 사용할 수 있습니다.사용자는 디스패처에 의해 결정된 다음 뷰를 수신합니다.디스패처는 컨트롤러 내에서 직접 캡슐화할 수도 있고 다른 컴포넌트로 분리할 수도 있습니다.디스패처는 동적 메커니즘과 함께 정적 보기를 제공합니다. 또한 RequestDispatcher 객체(서블릿 사양에서 지원됨)를 사용하여 추가 처리를 캡슐화합니다. | 도우미는 보기 또는 컨트롤러의 처리를 지원합니다.따라서 도우미는 다양한 목표를 달성할 수 있습니다. 뷰측에서는 도우미가 데이터를 수집하고 중간국으로서 데이터를 저장하기도 한다.뷰의 프로세스 전에 도우미는 뷰의 데이터 모델을 조정하는 역할을 합니다.도우미는 데이터를 웹 콘텐츠로 포맷하거나 원시 데이터에 직접 액세스하는 등의 특정 사전 프로세스를 수행합니다.대부분의 경우 여러 도우미가 하나의 보기에서 공동 작업을 수행할 수 있습니다.JSP 1.0+에서는 JavaBeans 컴포넌트로 구현되며 JSP 1.1+에서는 커스텀태그로 구현됩니다.또한 도우미는 모델을 적합한 형식으로 조정 및 변환하는 데 사용되는 변압기 역할도 합니다. | 도우미의 협업으로 보기는 클라이언트에 정보를 표시합니다.모델의 데이터를 처리합니다.처리가 성공하면 뷰가 표시되고 그 반대의 경우도 표시됩니다. |
Java에서의 데모 구현
다음은 전면 [4]컨트롤러를 구현하기 위한 데모 코드의 일부입니다.
사적인 무효 프로세스(Http Servlet Request(HttpServletRequest 부탁한다, Http Servlet Response 대답) 던지다 IOException(IOException), Servlet Exception(서블릿 예외) { ... 해라 { getRequestProcessor().프로세스 요구(부탁한다); getScreenFlowManager().다음 화면으로 전송(부탁한다, 대답); } 또 만나 (던질 수 있다 ex) { 스트링 클래스명 = ex.클래스 취득().getName(); 다음 화면 = getScreenFlowManager().get Exception 화면(ex); // 요청에 예외를 넣습니다. 부탁한다.set Attribute("javax.servlet.jsp.jspException", ex); 한다면 (다음 화면 == 무효) { // 일반 오류 화면으로 보내기 ex.print Stack Trace(프린트 스택 트레이스)(); 던지다 신규 Servlet Exception(서블릿 예외)("Main Servlet: 알 수 없는 예외: " + 클래스명); } }
이익과 부채
프론트 컨트롤러 [5]패턴을 사용하면 3가지 이점이 있습니다.
- 일원 관리전면 컨트롤러는 웹 응용 프로그램에 대한 모든 요청을 처리합니다.여러 컨트롤러를 사용하지 않도록 하는 중앙 집중식 제어 구현은 사용자 추적 및 보안 등의 애플리케이션 전반의 정책을 시행하는 데 적합합니다.
- 스레드 세이프티새로운 요구를 수신하면 새로운 명령어개체가 발생하며 명령어개체는 스레드세이프가 아닙니다.따라서 명령어 클래스에서 안전합니다.스레드 문제가 수집되었을 때 안전성이 보장되지는 않지만 명령어로 동작하는 코드는 여전히 스레드 세이프입니다.
- 설정 가능성.웹 애플리케이션에는 1개의 프론트 컨트롤러만 필요하기 때문에 웹 애플리케이션 구현 구성이 크게 간소화됩니다.핸들러는 디스패치의 나머지를 실시하기 때문에 다이내믹 명령어를 사용하여 새로운 명령어를 추가하기 전에 아무것도 변경할 필요가 없습니다.
데이터베이스 또는 XML 문서를 검색하여 다음 작업을 결정하는 프론트 컨트롤러의 경우 성능이 저하될 수 있습니다.또한 기존 시스템에 전면 컨트롤러를 구현하려면 항상 기존 시스템을 교체해야 하므로 초보자가 시작하기 어렵습니다.
MVC 패턴과의 관계
- 시스템의 신뢰성과 유지보수성을 향상시키기 위해 시스템 전체에서 동일한 공통 로직을 가진 중복 코드를 피하고 집중 관리해야 합니다.
- 애플리케이션의 데이터는 한 곳에서 처리하는 것이 좋기 때문에 데이터베이스 검색 코드를 중복할 필요가 없습니다.
- MVC 패턴의 다른 역할은 테스트 가능성을 높이기 위해 분리해야 합니다.이는 MVC 패턴의 컨트롤러 부분에서도 마찬가지입니다.
비교
페이지 컨트롤러는 MVC 모델의 전면 컨트롤러의 대체 수단입니다.
페이지 컨트롤러 | 전면 컨트롤러 | |
---|---|---|
베이스 클래스 | 기본 클래스가 필요하며 애플리케이션 개발과 동시에 증가할 것입니다. | 모든 요청을 해결하는 중앙 집중화는 기본 클래스 메서드보다 수정하기가 쉽습니다. |
보안. | 다양한 객체가 일관성 없이 다르게 반응하기 때문에 보안이 낮습니다. | High. 컨트롤러는 조정된 방식으로 구현되어 있어 응용 프로그램을 더 안전하게 만듭니다. |
논리 페이지 | 각 논리 페이지에 단일 개체. | 모든 요청을 처리하는 컨트롤러는 1개뿐입니다. |
복잡성 | 낮다 | 높은 |
「 」를 참조해 주세요.
레퍼런스
- ^ Fowler, Martin. "Front Controller". Retrieved September 26, 2017.
- ^ "Web MVC framework". Spring Framework Reference Documentation. Pivotal Software. Retrieved September 26, 2017.
- ^ "Front Controller Pattern".
- ^ "Demo code in Java". Archived from the original on 2012-04-19.
{{cite web}}
: CS1 maint: bot: 원래 URL 상태를 알 수 없습니다(링크). - ^ "Benefits for using front controller".
메모들
- Alur, Deepak; John Crup; Dan Malks (2003). Core J2EE Patterns, Best Practices and Design Strategies, 2nd Ed. Sun Microsystems Press. pp. 650pp. ISBN 0-13-142246-4.
- Fowler, Martin (2003). Patterns of Enterprise Application Architecture. pp. 560pp. ISBN 978-0-321-12742-6.
외부 링크
- Bear Bibeault의 Front Man™, 경량 Java 구현.