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

GWT&;MVP-显示/编辑复杂对象的最佳实践?,gwt,view,mvp,presenter,Gwt,View,Mvp,Presenter,我所了解的所有GWT/MVP示例都过于简单,无法清楚地说明显示和处理稍微复杂的模型对象的最佳实践 例如,大多数示例都类似于演示者将单击处理程序附加到视图上的几个文本框……如果单击“保存”,将调用演示者的save(),它只获取更新的值,我们完成了MVP样式。但这并不现实 例如,假设我们有: 演示者 -获取一个“model”对象,比如说任何具有未知数量的各种原语的对象 ViewX -应在表格中显示模型对象,和/或允许对其进行编辑/重新保存 …所以这听起来非常非常基本。但是,我们不知道模型对象中需要显

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

例如,大多数示例都类似于演示者将单击处理程序附加到视图上的几个文本框……如果单击“保存”,将调用演示者的save(),它只获取更新的值,我们完成了MVP样式。但这并不现实

例如,假设我们有:

演示者 -获取一个“model”对象,比如说任何具有未知数量的各种原语的对象

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

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

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

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

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


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

据我所知,MVP是一条带有m-p-V点的线。因此p和p都相互作用,但m和V只与p相互作用

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

现在,如果V应该显示泛型表,那么您应该创建泛型方法:
addColumn(..)
来定义列,并
addRow(..)
来添加数据。新方法非常灵活,支持动态添加列

关于变化-V应该通知,p应该采取行动。此外,还有一些新的,IMHO不适合MVP,但应该易于使用