2012-03-17 4 views
2

MVP 패러다임은 모델과 뷰가 표현자를 통해 연결되어 있다고 가정하지만 CellTable은 기본적으로 생성자에서 형식 인수가 필요합니다. 그렇다면 CellTable을 MVP에 적합하게 만들 수 없다는 뜻입니까?CellTable을 사용하여 MVP 아키텍처 구현

답변

3

MVP에서 CellTable을 성공적으로 사용했습니다. 핵심은이 아키텍처의 목적을 이해하는 것입니다.

MVP는 모델에 완전히 독립적 인보기가 아니므로 MVP에서 특정 모델 클래스에서만 작동하는보기를 갖는 것이 좋습니다. 요점은 발표자에게 가능한 한 많은 모델 처리 및 이벤트 처리를 유지하는 것입니다. 따라서 발표자 코드를 효율적으로 단위 테스트 할 수 있습니다. 브라우저 환경 (예 : 위젯)이 필요한 것은보기에 있어야 정상적인 단위 테스트를 방해하지 않습니다 (이러한 구성 요소는 인 매우 인 GwtTestCase로만 테스트 할 수 있습니다).

HasData로 반환되는 테이블을 만들려면 View 인터페이스 메소드가 있어야합니다. 발표자 바인딩 메서드에서이 메서드를 호출하여 테이블을 가져 와서 테이블의 데이터 공급자를 인스턴스화하고 업데이트 된 데이터로 발표자의 데이터 공급자를 조작합니다.

//MyPresenter.java 
HasData<MyClass> table = display.addTable(); 
ListDataProvider<MyClass> dataProvider = new ListDataProvider<MyClass>(); 
dataProvider.addDataDisplay(table); 

//assumes results is a collection of MyClass to display. 
//use for loop if you need to do some manipulation to get the objects in 
dataProvider.getList().addAll(results); 


//MyView.java 
@Override // since this implements the definition from the view interface 
public HasData<MyClass> addTable() 
{ 
    CellTable<MyClass> table = buildTable(); //boiler-plate table building code in this method 
    myPanel.add(table); 
    return table; 
} 

이 날이 속하는 뷰에 뷰 로직 (열 정의 등)을 유지하고, 발표자의 데이터 모델을 처리 할 수 ​​있습니다.

+0

'TransUnit'은'MyClass'를 읽고'addTable'는'@ Override'를 생략해야합니다. 왜 거기에 있는지 보려면'class MyView'가 충분하지 않습니까? 아니면 내가 놓친 게 있니? –

+0

@MattWallis 당신은 수업에 대한 권리가 있습니다. 발표자가보기 인터페이스를 참조 할 것이기 때문에 (일반적으로 적어도 내가 해왔 던 방식이므로) 일반적으로 발표자에서 액세스중인보기의 모든 항목에 @ @ Override가 있습니다. 여기에 포함 시키십시오. –

관련 문제