2

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

例如,大多数示例都类似于演示者,它将单击处理程序附加到视图上的几个文本框...如果单击保存,则调用演示者的 save() 来获取更新的值,然后我们就完成了, MVP风格。不过这不太现实。

例如,假设我们有:

PresenterX - 获取一个“模型”对象,比方说任何具有未知数量的各种原语的对象或其他任何东西

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

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

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

最后,假设视图上有一个“保存”按钮......谁的工作是找出表中所有已更改的行?

在我看来,视图要么需要更多地理解模型,要么演示者需要更多地真正理解视图——这两者都不是好的 MVP :( ...或者应该有一些中间对象。

我知道这类东西有一些更好/更新的有用方法(编辑器/请求工厂等),但我正在寻找有关上述方案的建议。

4

1 回答 1

1

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

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

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

关于更改 - V 应通知,P 应采取行动。此外,还有新Editors的 IMHO 不太适合 MVP,但应该易于使用。

于 2011-03-04T13:02:58.827 回答