2011-03-11 3 views
2

MVP 관련 질문 전체 :MVP 안내 - 발표자 인스턴스화의 합법성

나는보기에 반하여 작업하는 페이지가 있습니다. 그것을 IMyView라고 부르 자.

나는보기를 채우는 발표자가 있습니다. MyViewPresenter라고 부르 자.

다른보기와 함께 작업하는 또 다른 발표자가 있습니다. 'LoadComments()'라는 메서드를 제공합니다. 이 발표자 MyOtherViewPresenter를 호출 해 봅시다.

IMyView에 대한 작업중인 페이지에서 MyOtherViewPresenter에서 LoadComments() 메서드를 호출하고 싶습니다.하지만 MVP 'legalities'측면에서 그렇게해야하는지 궁금합니다.

다른 질문과 관련이있는 다른 발표자가 제공 한 방법을 사용하려면 어떻게해야합니까? 발표자가 내 페이지에서 작업해야하는 것과 동일한 발표자 방법을 제공하는 데 집중해야합니까, 아니면보기 당 두 명 이상의 발표자를 사용하는 것이 좋을까요?

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      MyViewPresenter presenter = new MyViewPresenter(this); 
      presenter.LoadProduct(); 

      MyOtherViewPresenter collab = new MyOtherViewPresenter(); 
      string comments = collab.LoadComments(); 
     } 
    } 

미리 생각해 주셔서 감사합니다.

답변

4

MVP에서는 다른 발표자의 방법을 사용해서는 안됩니다. 보기는 이제 자신의 발표자의 존재에 대해서만해야합니다. 그리고 그 지식조차도 가능한 한 적어야합니다. 발표자가보기를 제어하고 조정합니다. 그렇지 않다. (MVP의 패시브 뷰 변형)

다른 발표자가 도우미 클래스의 도우미 메서드로 추상화하는 것보다 재사용 할 코드가있는 경우. 공통 UI 요소 (여러 컨트롤)가있는 경우이를 사용자 정의 컨트롤에 배치하면 해당 요소도 재사용 할 수 있습니다.

수동보기를 사용하는 경우 발표자는 정보를보기로 푸시합니다. 귀하의 코드에서 :

string comments = collab.LoadComments(); 

이것은 정보를 끌어 오는 것입니다. 그렇게해서는 안됩니다. 하지만 완전히 다른 토론입니다 :-)

+0

+1 도우미 방법입니다. 코드를 포함하는 기본 표현 자 클래스를 만드는 것도 고려해 볼 수 있습니다. –

+0

이 Turbas를 이용해 주셔서 감사합니다. 당신이 말하는 것처럼 도우미 메서드에 추상화하는 것이 합리적입니다. 그리고 이것은 제가 사용할 방법입니다. 나는 합리적으로 MVP에 익숙하며, 다른 개발자가 내가 참여한 프로젝트를 중단 한 곳에서 픽업하고 있으며, 프리젠터 접근 방식을 사용하고있는 것처럼 보인다. 일관성을 위해서 나는 그것을 고수했다. 대안을 간단히 설명해 주시겠습니까? 베스트. – Ian

관련 문제