21

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

我发现不久前发布了一个帖子-> GWT 2.2 MVP vs. GWT 2.1 Activities-Places

“MVP 架构。MVP 是概念,实现它的方法之一是场所-活动框架”

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

我们可以给出“没有 MVP 的活动和地点”

我们可以混入“活动和地点与 MVP”

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

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

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

4

5 回答 5

21

TL;DR:地点和活动与 MVP 没有任何关系。

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

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

这些“部分”(区域)中的每一个都由ActivityManagers 管理,这些 s 监听PlaceChangeEvents 并询问其关联的在ActivityMapperActivity区域中显示的内容。

这都是关于导航的。

与 MVP 没有关系(尽管官方文档是这么说的)。但是,如果您使用 MVP,您可能会让您的活动成为“演示者”,控制“视图”(活动将传递回AcceptsOneWidget其方法的接收参数start)。但这不是一个规则,例如,Google 正在尝试在 mobilewebapp 示例中分离活动和演示者。

于 2011-06-14T10:41:47.143 回答
9

MVP代表Model , View , Presenter,它是一种编码模式。它只是MVC模型视图控制器)模式的演变。请参阅MVC 维基百科页面

MVP 和 MVC 的区别在于,在 MVP 中,模型和视图是互不认识的。在 MVP 中,您的观点应该尽可能愚蠢。所有的交互都由 Presenter 处理。这只是正确组织代码的一种方式。

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

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

谷歌文档说:

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

因此,Activities and Places 不仅仅是一个 MVP 框架。尽管如此,一个Activity是一个Presenter

public interface Activity {

  String mayStop();

  void onCancel();

  void onStop();

  void start(AcceptsOneWidget panel, EventBus eventBus);
}

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

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

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

上面提到的其他人的地方只是您的 URL 的代表。

来自 google 的 Activity Place 实现涉及许多对象。这是一个帮助您理解的模式。你会看到活动只是整个事情的一小部分。您可以在本文中的我的博客上找到更多详细信息

在此处输入图像描述

于 2013-03-08T12:57:15.617 回答
7

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

混乱始于 Google IO 视频,其中引入了 MVP GWT 概念,但没有给出实现。所以人们开始自己滚动。然后 google 写了 2.1 文档,他们详细介绍了这个概念,并且只提供了一些示例代码供下载。后来在 2.2 中,他们介绍了他们的完整实现,活动等。

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

于 2011-06-14T06:25:25.533 回答
2

只要您将它们视为两种开发模式,就很容易将它们分开。MVP 是一种关注点分离的模式,Activities 和 Places 是一种用于 URL 和历史管理的工具。

这是一篇很好的文章,可以帮助消除任何混淆,MVP,活动和地方混淆

于 2012-08-15T19:14:32.087 回答
0

有两个独立的维度 Design Pattern - No Pattern - MVP

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

您可能有一个可以遵循以下之一的应用程序

  • 没有 MVP,没有活动和地点
  • 只有MVP
  • 只有活动和地点
  • 活动和地点的 MVP
于 2015-03-11T19:56:22.880 回答