【问题标题】:GWT MVP composition of partsGWT MVP 部件组成
【发布时间】:2012-10-19 00:43:32
【问题描述】:

我们一直在使用推荐的 GWT 方法以 MVP 方式构建应用程序的各个部分。我们使用的逻辑基于 Google 的示例 - Presenter 获取/准备数据并将其设置在 View 上,并且 View 包含对其调用的 Presenter 的引用(例如在 UiHandlers 中)。

我们构建的应用程序的某些部分应该在其他视图中重用。例如 - 有时是应用程序一部分的“主视图”的视图 - 可以在应用程序另一部分的弹出窗口中使用(当然,在另一种情况下,视图/演示者的初始化方式不同,但基本上是一样的)。

做这样的事情的正确方法是什么?如果不求助于丑陋的 hacky 东西,我似乎找不到合适的。

例如 - 如果我将重用组件的展示器放在主视图中 - 很容易初始化重用组件,但在主展示器中接收返回结果很丑陋。这可以通过传递一个 runnable 或创建一个自定义处理程序或将父 Presenter 本身传递给重用的 Presenter 来解决。

所有这些方法对我来说似乎都不正确,而且看起来很丑陋。 有什么想法/经验吗?

【问题讨论】:

  • 我们想到了 EventBus,但我们不想在项目中造成混乱。在一个较旧的 GWT 项目中,我们几乎将事件总线用于所有事情,但它很快就变得很糟糕:) 数十个松散耦合的 UI 部件通过数百个事件进行通信。我发现 MVP 模型更易于使用,但显然你不能很好地使用它。是否有任何同时使用事件和演示者的示例,以便我可以尝试从中找出一些最佳实践?
  • 我认为如果应该尝试在使用全局EventBus 和直接调用组件/演示者之间找到一个很好的平衡点。我手头没有真正的例子。但作为一般准则,我不会将全局 EventBus 用于 UI 组件。我将在包含它的视图中处理 UI 组件的所有事件和状态更改。如果应用程序/演示者的另一部分对 UI 组件的状态更改感兴趣,视图可以回调演示者,这可能会执行一些附加逻辑或在全局 EventBus 上触发事件。

标签: gwt mvp composition code-reuse


【解决方案1】:

您所描述的是能够由 2 个不同的演示者控制的视图。以接口的形式抽象出通用 API 后面的那些演示者就足够了。

您还可以将其视为在两个不同视图中使用的复合小部件。然后,复合小部件将公开事件和公共 API,两个视图都可以连接到它们的特定演示者。

【讨论】:

  • 有趣的思考方式! :)
【解决方案2】:

查看活动和地点,它可以帮助您设计和构建应用程序。

https://developers.google.com/web-toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces .

【讨论】:

  • 恐怕它不适合这类事情。我们在更广泛的意义上使用活动和地点 - 用于访问应用程序的一部分。我所说的是重用小部件以及演示者中的逻辑。
猜你喜欢
  • 2012-03-15
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多