MVP 패턴 : 여러 발표자가 분리되어야합니까, 아니면 직접 의사 소통 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/576529

  •  05-09-2019
  •  | 
  •  

문제

나는 다음과 같이 보이는 UI가 있습니다.

    +--------+---------------+
    | model1 | model details |
    | model2 |     here,     |
    | model3 | loaded as the |
    |        | user selects  |
    |        | a model from  |
    |        |   the left.   |
    |        |               |
    +--------+---------------+

나는 사용하고있다 MVP 패턴 이 UI를 운전합니다.

나는 여기에서 많이 단순화하고 있지만, 나누고 정복하기 위해 발표자를 두 가지로 나누고 싶습니다 : 왼쪽의보기에서 사용자 제스처를 처리하는 하나 (사용자는이보기에서 모델 목록을 변경합니다, 예를 들어 정렬). 그리고 오른쪽의 관점에서 사용자 제스처를 처리하는 다른 발표자 (사용자는이보기에서 개별 모델을 변경합니다).

왼쪽의 발표자는 전체 모델 목록과 상호 작용하지만 오른쪽의 발표자는 단일 모델과 만 상호 작용합니다. 사용자가 왼쪽의 목록에서 선택하는 모델입니다. IOW UI는 왼쪽에서 오른쪽으로 구동됩니다.

사용자가 왼쪽의 모델을 선택한 후 (즉, 클릭) 현재 구현은 다음과 같습니다.

LeftPresenter.onModelClick = function(event) {
    var model = this.getModelFromEvent(event);
    this.view.setSelectedModel(model); // updates list widget on left
    RightPresenter.setSelectedModel(model); // notify the other Presenter
}

RightPresenter.setSelectedModel = function(model) {
    // lazy load the model from the db, and update the
    // view when the model fires the "loadComplete" event
    model.bind('loadComplete', this.view.setModel);
    model.lazyLoad();
}

다음은 MVP 패턴 또는 그 문제에 대한 MVC GUI 패턴에 대해 퍼지가있는 부분입니다.

  1. UI가 이와 같은 여러 발표자가 운전할 수 있습니까?
  2. 여러 발표자가 분리되어야합니까, 아니면 여기에 표시된 것처럼 서로 직접 의사 소통 할 수 있습니까?

그래서 내 질문은 다음과 같습니다. 가장 좋은 방법은 무엇입니까? RightPresenter 사용자가 모델을 선택했습니다 LeftPresenter의 견해?

도움이 되었습니까?

해결책

1. UI는 이와 같은 여러 발표자가 운전할 수 있습니까?

2. 여러 발표자가 분리되어야합니까, 아니면 여기에 표시된 것처럼 서로 직접 의사 소통 할 수 있습니까?

내가 처리하는 방식

이벤트가 발생하면 ui_object가 이벤트를 처리하고 명령 개체를 생성하고 발사합니다. 각 ui_object는 ui_views에있는보기 인터페이스를 구현하고 ui_view에 자체적으로 등록합니다. 명령 개체는 인터페이스를 통해 UI_VIEW의 등록 된 UI 객체에 액세스 할 수 있습니다.

예를 들어 내 금속 절단 애플리케이션 중 하나에는 절단을 위해 금속 시트에 배치되지 않은 모든 부품이 포함 된 홀드라는 스크린 요소가 있습니다. 부품은 여러 가지 방법으로 홀드에 들어갈 수 있습니다. Shape 편집기에 의해 생성 된 부품 파일에서로드, CAD 화면에 의해 생성되거나 금속 시트에서 픽업됩니다.

이러한 각 작업은 명령 설계 패턴을 구현하는 별도의 명령 개체로 캡슐화됩니다. 명령 개체가 실행되면 호출됩니다.

CuttingScreen.Refresh
CADScreen.Refresh
ShapeEditor.Refresh

이들 각각은 홀드를 업데이트하는 각 화면을 새로 고칠 것입니다.

이제 응용 프로그램 인터페이스에 메소드를 추가 할 수 있습니다. mycuttingApplication.holdrefresh는 세 번의 새로 고침을 모두 호출 할 것입니다.

그러나 중요한 점은 View가 업데이트를 위해 구현 된 인터페이스를 사용하는 명령을 호출한다는 것입니다. 보기 객체는 하위 레이어로 자체적으로 등록됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top