MVP范例假设模型和视图通过演示者连接,但默认情况下CellTable在其构造函数中需要一个类型参数。那么这是否意味着无法使CellTable适合MVP?
答案 0 :(得分:3)
我在MVP中成功使用了CellTable。关键是要了解这种架构的目的。
MVP不是关于视图与您的模型完全无关的,在MVP下可以有一个仅适用于您的特定模型类的视图。重点是在演示者中尽可能多地保持模型处理和事件处理。这允许演示者代码有效地进行单元测试。任何需要浏览器环境的东西(例如窗口小部件)都应该在视图中,它不会干扰正常的单元测试(这些组件只能用GwtTestCase进行测试,非常慢)。
我有一个View接口方法来创建表,该表作为HasData返回。在presenter绑定方法中,我调用此方法来获取表,实例化表的数据提供程序,并使用任何更新的数据操作演示者中的数据提供程序。
//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;
}
这允许我将视图逻辑(列定义等)保留在它所属的视图中,并在演示者中处理数据模型。