【发布时间】: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