2010-04-01 3 views
12

저는 GWT를 배우기 만하면됩니다. 그래서 나는 여전히 모든 특징과 특징을 정리하려고합니다. 나는 그들이 MVP 패턴을 보여주는 예제를 통해 읽고 있는데, 나는 한 가지에 대해 궁금해하는 것을 제외하고는 꽤 많이 얻는다.스케일링 gwt의 "연락처"(샘플 프로젝트) MVP가 포함 된 AppController

그들이 사용하는 AppController는 ValueChangeHandler 인터페이스를 구현하고 onValueChange 메서드는 기록이 변경되면 트리거됩니다.

내 문제는 AppController의 onValueChange입니다. (예제 프로젝트를 본 적이없는 사람이라면 아래에 포함 시켰습니다.) 그것은 전송 된 히스토리 토큰에 대한 문자열 비교를 수행하고 적절한 표현자를 인스턴스화하여 조치를 처리합니다. 이것은 3 가지 동작을 가진 샘플 앱의 경우 모두 멋지고 멋지지만, 더 많은 액션이있는 실제 앱에이를 어떻게 스케일할까요?

이 패턴을 고수하면 꽤 큰/못생긴 else if이 생깁니다. 그러나 저는 GWT (및 java)가 아직 너무 커서 더 큰 응용 프로그램의 패턴을 추측 할 수 없습니다.

도움을 주시면 대단히 감사하겠습니다.

public class AppController implements Presenter, ValueChangeHandler<String> { 

    ... 

    public void onValueChange(ValueChangeEvent<String> event) { 
    String token = event.getValue(); 

    if (token != null) { 
     Presenter presenter = null; 

     if (token.equals("list")) { 
     presenter = new ContactsPresenter(rpcService, eventBus, new ContactsView()); 
     } 
     else if (token.equals("add")) { 
     presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView()); 
     } 
     else if (token.equals("edit")) { 
     presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView()); 
     } 

     if (presenter != null) { 
     presenter.go(container); 
     } 
    } 
    } 
} 

답변

6

큰 규모의 GWT 응용 프로그램으로 유효한 점수를 올립니다. 나는 최근에 50.000 + 라인 GWT 포털 애플 리케이션에서 일했고 우리는 이벤트와 복잡한 스위치/핸들러 패턴에 묻혀있다. here 좋은 블로그 포스트가 있습니다.이 블로그는 이것이 얼마나 끔찍한지를 설명하고 해결책을 암시합니다 (끔찍한 각주 참조).

그러나 새로운 GWT2 UIBinder 및 MVP 기능은 작업을 단순화합니다. 실제로 위에서 언급 한 블로그 게시물의 저자는 places 프레임 워크 (GWT 2.1의 일부) here에 대해 작성했습니다.

0

onValueChange 메소드가 수신해야하는 유일한 이벤트는 "보기 변경"이벤트입니다. 각 조건이 1 줄임을 고려할 때 결코 그럴 수 없습니다. 결국 그 패턴을 사용하면 괜찮을 것입니다.

Lars가 말했듯이 UiBinder를 MVP 패턴과 결합하는 것은 쉽고 코드 줄 수를 크게 줄이고 코드를 수정하기가 더 쉽습니다.

관련 문제