2009-04-15 4 views

답변

1

제어기는 두 전통적인 역할을 가지고 동작의 모델을 통지하는 입력 인터페이스로부터 이벤트 (등록 핸들러 또는 콜백)

  • 운반

    1. - 또는 발생하지 않을 수를 모델의 상태

    그것은 데이터 유효성 검사를 수행하지 않습니다에 변화를 그 모델에 않으며 어떤 정보가 표시되는 방법에 말을 가지고있다.

  • +0

    보다 일반적으로 컨트롤러는보기 및 모델을 조정합니다. 모델에서 변경 사항을 호출하면 간접적으로 변경됩니다. 예 : 외관 방법을 통해. 그 목적은 사용자 인터페이스에서 비즈니스 로직을 분리하는 것입니다. –

    +0

    이런 의미에서, 컨트롤러 메소드에서 웹 사용자 입력에 대한 모델 바인딩의 아이디어는 권장되지 않습니까? – zsharp

    0

    모델 서비스는 컨트롤러의 존재를 알아야 할 필요가 없으므로 컨트롤러는 모델 서비스를 활용하여 뷰가 필요로하는 것을 수행 할 수 있습니다.

    1

    이는 응용 프로그램의 범위에 따라 크게 달라집니다. 상대적으로 빠르거나 더러 우면 over-engineering에는 아무런 의미가 없습니다. 물론 컨트롤러가 모델 객체와 대화 할 수 있습니다. 반면에, 어떤 이유에서 건 더 "enterprisey"가 필요한 경우 MVC와 함께 사용하는 좋은 패턴은 소위 "비즈니스 위임 (Business Delegate)"입니다. 여기서 하나 이상의 모델 객체에 대해 하나 이상의 메소드로 거친 메소드를 작성할 수 있습니다. 예를 들어 객체를 삭제 한 다음 해당 객체가없는 새로 고침 된 목록을 반환 할 수 있습니다. 이 레이어는 두 가지 이점을 제공합니다. 하나는 모델 객체에 사용되는 ORM 시스템과 컨트롤러를 분리합니다. 또한, 다시 throw하는 대신 발생했을 수있는 예외를 최종적으로 건설적으로 처리해야하는 계층입니다.

    1

    저는 컨트롤러가 모델 객체를 다루어야한다고 생각하지 않습니다.

    컨트롤러가 실제로 UI 계층의 일부라고 생각하는 경향이 있습니다. 나는 컨트롤러와 앱의 나머지 부분 사이에 서비스 레이어를 삽입하는 것을 선호한다. 웹 티어는 HTTP 요청을 받아들이고 요청 객체의 매개 변수를 서비스 인터페이스에서 처리 할 수있는 객체로 비 정렬 화하고 응답을 다시 전달하도록 정렬합니다. 트랜잭션, 작업 단위 및 모델 및 지속성 오브젝트를 다루는 모든 작업은 서비스에 의해 수행됩니다.

    이 접근 방식은보다 서비스 지향적입니다. 서비스를 사용자 인터페이스와 분리하여 여러 클라이언트가 동일한 서비스를 재사용 할 수있는 가능성을 열어줍니다. 따라서 서비스에 대한 요청을 계층 적으로 "얇게"만들 수 있으므로 REST, EJB 또는 CORBA 등 SOAP 서비스를 쉽게 전환 할 수 있습니다.

    +0

    요청의 IP를 가져 오려면 서비스 계층이나 컨트롤러에서 요청합니까? – zsharp

    +0

    사용자 식별을 위해 동일합니까? IP 주소는 – zsharp

    +0

    컨트롤러입니다. 보안 측면에서 보면 교차 관심사이므로 한 측면에 속합니다. – duffymo

    관련 문제