2013-03-26 3 views
3

GWT를 사용하여 웹 응용 프로그램을 작성하고 GWT 웹 사이트의 MVP tutorial (예 : History 탐색)을 사용하고 있습니다.GWT MVP 탐색 사이드 바

나는 탐색 사이드 바를 가지고있는 최선의 방법에 관해서 조금 혼란 스러워요 (즉, 네비게이션 링크는 메인 창에서 내용을 변경 클릭. 아래를 참조) 필자가 볼

-------------------- 
|  |   | 
| nav | main  | 
|  | window | 
|  |   | 
|  |   | 
-------------------- 

하나의 잠재적 인 방법을 이렇게하면 네비게이션과 내용을 위해 두 개의 <div> 태그를 HTML에 선언 할 수 있습니다. 예 :

@Override 
public void onValueChange(ValueChangeEvent<String> event) { 

    ... 

    if (token.equals("navigation")) { 
     presenter = new NavigationPresenter(rpcService, eventBus, new NavigationView()); 
     presenter.go(RootPanel.get("navigation")); 
    } 

    ... 

    if (token.equals("content")) { 
     presenter = new ContentPresenter(rpcService, eventBus, new ContentView()); 
     presenter.go(RootPanel.get("content")); 
    } 

    ... 
} 

이것이 최선의 접근 방법인지 확신 할 수 없습니다. (내비게이션 패널과 콘텐츠 창 사이의 양방향 통신은 EventBus을 통해 이루어질 수 있다고 생각하십니까? 모바일 사이트와 같이 UI를 변경하는 경우 유연한 방법입니까?)

나는 사람들이 제안은 이것이 최선의 방법이라고 생각합니다. 나는 주위를 읽고 종종 Activities and Places에 대한 논의에 착륙,하지만 난 그것을 이해 이러한 MVP 아키텍처에 다소 차이가있다

(나는 History 내 사용하는 것이 (?)를 포함 생각하지만, 활동 장소, browser history management에 유용합니다) 모든 제안을 부탁드립니다.

답변

3

예, 맞습니다 : Activies and Places은 내역 및 내비게이션 관리에 관한 것으로 프레임 워크는 GWT입니다. MVP은 단순히 아키텍처 디자인 패턴입니다. 연결된 프레임 워크에 표시된 프레임 워크를 사용하여 MVP을 얻을 수 있습니다.

샘플에서는 할 수 있지만 비싸지 않은 재현을 피하기 위해 각보기를 (게으른) 싱글 톤으로 만듭니다. 개인적으로 나는 이런 식으로 맘에 안 들어, Display 정의 (결국 많은) HasXxx 인터페이스 측면에서.

역사 관리가 중요하다면, Activities and Places을 선택하는 것은 거의 생각할 필요가 없다고 생각합니다 (적어도 저에게는 적어도 앱의 골격을 정의해야합니다). Here 정말 좋은 기사를 찾을 수 있습니다. 그리고 사용 사례가 얼마나 흔한 지 알 수 있습니다 : 장소 변경에 반응하고 (활동 관리자 덕분에) UI를 업데이트 할 활동을 생성/다시 시작하는 표시 영역 (탐색 영역 및 주요 영역)을 정의해야합니다 . 이 방법을 통해 발표자가 활동하는 응용 프로그램 전체의 종류 인 MVP을 얻을 수 있습니다.

는 는 지금까지 우려 MVP으로, 그 일을 전혀 가장 좋은 방법이 없습니다

: 프레젠테이션과 비즈니스 로직 사이의 분리뿐만 아니라, 순수의 JUnit 테스트 : part 1, part 2MVP with A&P이 같은 목표를 달성하기 위해 단순히 다른 방법입니다 . 원하는 것을 선택하십시오. 참조 용 그룹에 대한 게시물은 this입니다.

희망을 시작하십시오.

+0

첫 번째 @Andrea Boscolo가 맞습니다. 나는 겸손한 두뇌가 알아낼 수있는 모든 각도에서 내역 관리를 연구했으며, Acitivities & Places는 휠을 다시 만들지 않고도 내역 매핑을 달성하는 가장 좋은 방법입니다. –

+0

유일한 단점은 PlaceHistoryMapper @WithTokenizers가 토큰을 생성하는 방식입니다. URL은 못생긴 IMO이고, ":"로 구분 된 접두사와 매개 변수입니다. "www.myapp.com/#/placeprefix/param1=value1¶m2=value2 대신 GWT의 표준 : 는 내가 좋아하는 URL을 생성"셀프 토큰 화 "장소를 구현 한 www.myapp.com/#placeprefix:anythingelseinthetoken ... URL 마니아 인 것 같습니다. –

0

내 앱의 경우 GWT 문서와 마찬가지로 ClientFactory를 사용하며 Views는 싱글 톤입니다.

그런 식으로 애플리케이션 구조 (메뉴 포함)는 ClientFactory에서 참조되는 싱글 톤이기 때문에 다른 모든 뷰는 인터페이스를 통해 사실상 직접 액세스 할 수 있습니다.

예를 들어 일부보기는 헤더의 일부 이미지를 밀거나 비디오를 표시하는 메뉴를 숨길 수 있습니다. 대부분의 경우, 앱의 구조는 히스토리 스택에 상태를 "유지"하기 위해 별도의 활동/장소가 필요하지 않습니다 ...

나는 대부분의 사람들이 서로를 호출하는 것을 좋아하지 않는다는 것을 알고 있습니다. 그렇습니다. 유일한 예외는 응용 프로그램의 구조보기입니다.이보기는 특정 활동인데, 활동이 아닌 발표자가 있고보기 자체가 영구적으로 표시됩니다.

알림과 함께 앱 구조와 다른보기간에 통신하면 앱이 스파게티 보울 IMHO가됩니다. 필자는 PureMVC와 같은 프레임 워크를 사용하여 이벤트/알림에 의존하여보기간에 의사 소통을하기도했습니다. 분리에는 유지 비용 및 코드 가독성과 같은 비용이 듭니다.