围绕整个GWT MVP与活动和场所的混乱

时间:2011-06-14 05:33:39

标签: gwt mvp gwt-places gwt-activities

在阅读了一段时间并观看Google IO视频后,我仍然对MVP与“活动和地点”的关系感到困惑。

我发现了一段时间后发布的帖子 - > GWT 2.2 MVP vs. GWT 2.1 Activities-Places

“MVP架构.MVP是概念,其中一种方法是场所 - 活动框架”

我也听到“演示者类似于活动”

我们可以提供“没有MVP的活动和场所”

我们可以混合“活动和地方与MVP”

“MVP只不过是我们如何组织我们的项目,以便我们可以轻松地测试和组织代码”

然后我想弄清楚这样的东西 - > http://code.google.com/p/gwt-platform/

我真的很困惑。我想要一站式线程来结束所有的混乱。

5 个答案:

答案 0 :(得分:21)

TL; DR:地方和活动与MVP无关。

地方是关于导航到您的应用:您从一个地方到另一个地方。并且活动建立在地方之上,以帮助将“你看到的”与“你在哪里”结合起来:

  • 当我在SO的主页上时,主要部分显示所有主题的问题列表,右侧的顶部显示我最喜欢的标签并帮助我设置标签过滤器,然后下面是添加,并且add下面是最近标签的列表,然后是最近的徽章列表。
  • 在这个问题页面上,主要部分显示问题及其答案,右侧的顶部被替换为问题标签上的信息,然后是添加,链接的问题,然后是相关问题。

这些“部分”(地区)中的每一个都由ActivityManager个人管理,这些PlaceChangeEvent听取ActivityMapper s并询问他们关联的Activity AcceptsOneWidget区域。

这都是关于导航的。

与MVP没有任何关系(尽管官方文档说的是这样)。如果你使用MVP,你可能会让你成为“演示者”的活动,控制一个“视图”(活动将传递给它start方法的参数中收到的{{1}} )。这不是一个规则,例如,Google是experimenting,在mobilewebapp示例中,有解耦活动和演示者。

答案 1 :(得分:9)

MVP 代表模型查看演示者,它是一种编码模式。这只是 MVC 模型查看控制器)模式的演变。请参阅MVC wikipedia page

MVP和MVC之间的区别在于,在MVP中,模型和视图彼此不了解。在MVP中,你的观点应尽可能愚蠢。所有交互都由Presenter处理。它只是一种正确组织代码的方法。

有些人已经创建了框架来减少以这种方式组织代码所需的工作量。看看不同的MVPimplementations。在网上很容易找到它们。

MVP使您的代码更容易测试,因为您可以通过其他实现(通常是模拟)轻松替换您的视图,这将伪造行为或您的视图。因此,您无需使用浏览器环境运行测试(GWT视图是HTML视图)。所以你的测试会跑得更快。

Google文档说:

  

“活动和地点”框架允许您在应用程序中创建可收藏的URL。

所以活动和场所不仅仅是一个MVP框架。然而,活动演示者

public interface Activity {

  String mayStop();

  void onCancel();

  void onStop();

  void start(AcceptsOneWidget panel, EventBus eventBus);
}

您可以在不使用地方和Google的其他对象的情况下为演示者使用“活动”界面。但在这种情况下,您应该编写一种自己的活动管理器,负责启动和停止您的活动。在开始和停止时,您可能想要创建视图,将其添加到dom,注册事件处理程序等。当您停止时,您将想要销毁所有这些。

在其他一些MVP实现中,您可以找到具有相同角色的bind()和unbind()方法。

来自Google的Activity Place实施的强大功能来自 Place 对象背后的所有对象,这些对象将使您的活动开始或停止并且将处理历史记录。

上面提到的其他人的地点只是您网址的代表。

谷歌的活动地点实施涉及许多对象。这是一个帮助您理解的模式。你会发现活动只是整个活动的一小部分。 You can find some more details on my blog in this article

enter image description here

答案 2 :(得分:7)

活动是演示者。地方只是历史令牌的包装。

混乱始于Google IO视频,其中引入了MVP GWT概念,但没有给出实施。所以人们开始自己动手。然后谷歌写了2.1文档,他们详细说明了这个概念,并给出了一些示例代码供下载。在2.2的后期,他们介绍了他们的全部实施,活动等。

所以,如果你想进入MVP路线,你需要选择你的实施。活动可能是最好的,因为它是官方的。

答案 3 :(得分:2)

只要您将它们视为两种开发模式,就可以很容易地将它们分开。 MVP是一种用于分离关注点的模式,“活动和场所”是一种用于URL和历史管理的工具。

这是一篇很好的文章,可帮助消除任何混淆,MVP, Activities and Places Confusion

答案 4 :(得分:0)

有两个独立的维度 设计模式   - 没有模式   - MVP

导航和屏幕遍历   - 没有导航   - 活动和地点

您的应用程序可以遵循以下其中一项

  • 没有MVP,没有活动和地方
  • 只有MVP
  • 仅活动和地点
  • MVP with Activities and Places