围绕整个GWT MVP与活动和地点的混淆

围绕整个GWT MVP与活动和地点的混淆,gwt,mvp,gwt-places,gwt-activities,Gwt,Mvp,Gwt Places,Gwt Activities,在阅读了一段时间并观看了谷歌IO视频后,我仍然对MVP与活动和地点的关系感到困惑 我发现不久前发布了一条帖子--> MVP架构。MVP是一个概念,其中一种方法是场所活动框架 我还听到“演讲者类似于一项活动” 我们可以提供“没有MVP的活动和场所” 我们可以加入“MVP活动和场所” “MVP只不过是我们如何组织我们的项目,以便我们能够轻松地测试和组织代码” 然后我想弄明白像这样的东西--> 我真的很困惑。我想要一个一站式线程来结束所有的混乱 活动是演示者。地点只是历史标记的包装 这种混乱始于谷歌

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

我发现不久前发布了一条帖子-->

MVP架构。MVP是一个概念,其中一种方法是场所活动框架

我还听到“演讲者类似于一项活动”

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

我们可以加入“MVP活动和场所”

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

然后我想弄明白像这样的东西-->


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

活动是演示者。地点只是历史标记的包装

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


因此,如果你想走MVP路线,你需要选择你的实现。活动可能是最好的,因为它是官方的;DR:地点和活动与MVP没有任何关系。

Places是指导航到你的应用程序:你从一个地方到另一个地方。活动建立在位置之上,以帮助将“所见”与“所处位置”绑定:

  • 当我在SO主页上时,主要部分显示所有主题中的问题列表,右侧顶部显示我最喜欢的标记并帮助我设置标记过滤器,下面是添加,添加下面是最近的标记列表,然后是最近的徽章列表
  • 在此问题页面上,主要部分显示问题及其答案,右侧顶部替换为问题标签上的信息,然后是添加、链接问题和相关问题
这些“部分”(区域)中的每一个都由
ActivityManager
s管理,这些部分监听
PlaceChangeEvent
s,并要求其关联的
ActivityMapper
在该区域中显示哪个
Activity

这都是关于导航的


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

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


这里有一篇很好的文章,可以帮助您消除任何困惑,

MVP代表模型,视图,演示者,它是一种编码模式。它只是从MVC模型视图控制器)模式的演变。看

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

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

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

谷歌文档说:

Activities and Places框架允许您在应用程序中创建可书签的URL

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

public interface Activity {

  String mayStop();

  void onCancel();

  void onStop();

  void start(AcceptsOneWidget panel, EventBus eventBus);
}
您可以为演示者使用活动界面,而无需使用位置和来自谷歌的其他对象。但在这种情况下,您可能应该编写一种自己的活动管理器,负责启动和停止您的活动。在开始和停止中,您可能希望创建视图、将其添加到dom、注册事件处理程序等,并且在停止时希望销毁所有这些

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

Google的Activity Place实现的威力来自Place对象背后的所有对象,这些对象将使您的活动开始或停止,并将处理历史

上面提到的其他人的位置只是您的URL的一个表示

google的Activity Place实现涉及到许多对象。下面是一个帮助您理解的模式。你会发现这个活动只是整个事情的一小部分


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

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

您可能有一个应用程序,可以遵循以下其中一项

  • 没有MVP,没有活动和场所
  • 只有MVP
  • 只有活动和场所
  • 具有活动和场所的MVP
“如果您使用MVP”,您的确切意思是什么?就像我自己分离模型视图演示者,让它们与我自己的impl接口交互一样