Достижение архитектуры MVP с помощью CellTable - PullRequest
2 голосов
/ 17 марта 2012

Парадигма MVP предполагает, что модель и представление связаны через презентатор, но CellTable по умолчанию требует аргумент типа в своем конструкторе.Значит ли это, что CellTable нельзя сделать подходящим для MVP?

1 Ответ

3 голосов
/ 03 апреля 2012

Я успешно использовал CellTable в MVP.Ключ в том, чтобы понять назначение этой архитектуры.

MVP не означает, что представление полностью не зависит от вашей модели, в MVP вполне нормально иметь представление, которое будет работать только для ваших конкретных классов модели.Суть в том, чтобы в презентаторе было как можно больше обработки моделей и событий.Это позволяет эффективно выполнять модульный тест кода презентатора.Все, что требует среды браузера (например, виджеты), должно быть в поле зрения, где оно не будет мешать нормальному модульному тестированию (такие компоненты можно тестировать только с помощью GwtTestCase, который очень медленный).

У меня есть метод интерфейса View для создания таблицы, которая возвращается как HasData.В методе привязки презентатора я вызываю этот метод для получения таблицы, создания экземпляра поставщика данных для таблицы и манипулирования поставщиком данных в презентаторе с любыми обновленными данными.

//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;
}

Это позволяет мне сохранитьлогика представления (определения столбцов и тому подобное) в представлении, к которому оно относится, и работа с моделью данных в презентере.

...