GWT& MVP - 显示/编辑复杂对象的最佳实践?

时间:2011-03-04 12:20:46

标签: gwt view mvp presenter

我所学到的所有GWT / MVP示例都显得过于简单,无法清楚地了解有关显示和处理稍微复杂的模型对象的最佳实践。

例如,大多数示例都类似于演示者,它将点击处理程序附加到视图上的几个TextBox中...如果单击了save,则调用演示者的save(),它只是获取更新的值,我们'重做,MVP风格。但这不太现实。

例如,假设我们有:

PresenterX - 得到一个'模型'对象,让我们说任何具有未知数量的各种基元或任何

的对象

ViewX - 应在表格中显示模型对象,和/或允许对其进行编辑/重新保存

...所以听起来非常非常基本。但是,我们不知道模型对象中需要显示的字段数量。这可能与动态的行/列数有关。桌子可能没什么问题......但是演示者应该如何将它提供给视图表?作为视图理解的模型对象,或者将其分解为一堆列表...视图基本上仍然需要理解。

此外,某些字段可能是可编辑的,在我们获取模型对象之前这些字段是未知的(模型中的某些内容确定哪些字段是可编辑的,比如说) - 那么谁应该负责确定哪些是可编辑的?可能是演示者,但我们如何在视图中反映出MVP的方式呢?

最后,让我们说视图上有一个“保存”按钮...谁的工作是弄清楚表中所有被更改的行?

在我看来,视图需要更多地了解模型,或者演示者需要更多地了解视图 - 这两者都不是很好的MVP :( ...或者也许应该有一些中间对象。< / p>

我知道有一些更好/更新的有用方法来处理这类东西(编辑/ RequestFactory等),但我正在寻找有关上述情况的建议。

1 个答案:

答案 0 :(得分:1)

据我了解,MVP是M-P-V积分线。所以P与两者相互作用,但M和V仅与P相互作用。

此外,MVP的设计目标之一是具有可测试的P和M,这意味着V必须可以用模拟版本替换。因此,V不应暴露任何依赖于实现的接口(例如HasClickHandlers而不是Button)。

现在,如果V应显示通用表,则应创建通用方法:addColumn(..)来定义列,addRow(..)来添加数据。新CellTable非常灵活,支持动态添加列。

关于变更 - V应该通知,P应该行动。此外,有新的Editors,恕我直言,不适合MVP,但应该很容易使用。