2011-03-04 34 views
2

我学到的所有GWT/MVP示例看起来过于简单,无法清楚地看到哪些最佳实践与显示和处理稍微复杂的模型对象有关。GWT&MVP - 显示/编辑复杂对象的最佳实践?

例如,大多数示例都像是一个演示者,它将点击处理程序附加到视图上的几个文本框......如果单击保存,则会调用演示者的save(),它只是获取更新后的值,而我们MVP风格完成了。尽管如此,这并不太现实。

例如,假设我们有:

PresenterX - 获得一个“样板”对象,让我们说有一个未知数量的各种原语或任何

ViewX 任何对象 - 要显示的模型对象在表中,和/或允许它被编辑/重新保存

...这样听起来非常非常基本。但是,我们不知道模型对象中需要显示的字段数量。这可能与动态数量的行/列有关。桌子可能没有问题......但主持人应该如何将这个视角放到桌子上?作为视图理解的模型对象,或者将其分解成一堆列表......视图基本上仍然需要理解。除非我们获得模型对象(模型中的某些内容决定哪些字段可编辑,比如说),那么某些字段可能是可编辑的,因此,谁应该负责确定哪些内容可编辑或不可编辑?可能是主持人,但我们如何反映MVP的观点?

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

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

我知道有这类东西(编辑/ RequestFactory等)的一些更好的/较新的有用的方法,但是我正在寻找上述scenarious建议。

回答

1

据我了解,MVP是MPV点的一条直线,因此P与两者都相互作用,但是M和V只与P.相互作用。

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

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

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