2

这里是菜鸟。

我刚从 Ray Ryan 的 Google IO 演讲开始,并关注了 Google Developers 网站上的一些文章。我没有使用任何 GWT 附加组件,例如 GWTP 或 MVP4G 或 GIN 或任何其他东西。只是按照 GWT 网站上的联系人示例并尝试为我的案例建模。

我有一个DockLayout面板,它有一个标题、左侧的导航树和一个中央主面板。所有这些我都在一个实现DefaultPresenter的DefaultView中。

现在我有一个DialogBox,当用户在树中执行某些操作时会弹出它,这分别在DialogViewDialogPresenter中建模。

现在,当我隐藏DialogBox时,我最终会从AppController调用DefaultPresenter的一个新实例,这会创建一个新的 DefaultView并且我的所有树选择和主中央面板中的其他更改都消失了。

  1. 是否可以重复使用演示者的实例而无需在历史更改上创建新的实例?(例如,在我的情况下为DefaultPresenter )
  2. MVP 模式中有没有一种方法可以在具有持久值的演示者之间传递控件?
  3. 如何在事件触发时在应用控制器内加载演示者的现有实例?

还是我把整个 MVP 架构弄错了?我现在计划为我的每个组件设置不同的演示者和视图,比如HeaderPresenter / HeaderView、TreePresenter / TreeView 、 MainContentPresenter/MainContentView?所以我只会创建我需要的演示者的新实例(如MainContentPresenter)并保留现有的照原样(如TreePresenter 和 HeaderPresenter)这能解决我的问题吗?我将如何在浏览器窗口中拼接所有这些不同的视图?我没有使用 UiBIinder,只是坚持基础。

各位高手帮帮我,我陷入了僵局!

4

1 回答 1

2

当我阅读您的问题时,感觉答案应该是一篇文章,类似于Stateful Presenter Architecture for GWT Apps。然而,这是 StackOverflow,它是关于简洁的,所以让我们看看:

答案

1.是否可以重复使用演示者的实例而无需在历史更改上创建新的实例?

确实。没有什么能阻止您在注入您的视图的一堆单例演示者之间切换(切换将在您的ActivityMapper实现中发生)。请注意此后的假设,即您的演示者是活动

2.MVP 模式中有没有一种方法可以在具有持久值的演示者之间传递控件?

由于您的演示者现在是单身人士,他们将保留其成员变量的状态。对于演示者之间的消息交换,事件和EventBus是您的朋友。

3.如何在事件触发时在应用控制器内加载演示者的现有实例?

您的ActivityMapper实例一旦注册到您的ActivityManager就足够了。这ActivityManager将依赖于您public Activity getActivity(Place place)ActivityMapper接口的实现来返回您的单例演示者之一。

资源

David Chandler 的 Google I/O 2011 GWT 会议恰好涉及到这种类型的主/细节架构。我强烈推荐它,特别是对于这个问题,在第 18 分钟之后的部分,当大卫开始对活动和地点进行全面概述时。

于 2012-07-06T15:04:34.780 回答