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

Nit*_*eti 21 mvp gwt gwt-activities gwt-places

阅读一段时间并观看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/

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

Tho*_*yer 21

TL; DR:场所和活动与MVP无关.

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

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

这些"部分"(区域)中的每一个都由ActivityManagers 管理,这些s听取PlaceChangeEvents并询问其相关联的ActivityMapper哪个Activity在该区域中显示.

这都是关于导航的.

与MVP没有任何关系(尽管官方文档说的是这样).如果你使用MVP,你可能会让你的活动"演示者",控制一个"视图"(活动将传递回AcceptsOneWidgetstart方法参数中的接收者).这不是一个规则,例如,谷歌在mobilewebapp样本中试验了解耦活动和演示者.


Ron*_*ere 9

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

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

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

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

谷歌文档说:

"活动和位置"框架允许您在应用程序中创建可收藏的URL.

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

public interface Activity {

  String mayStop();

  void onCancel();

  void onStop();

  void start(AcceptsOneWidget panel, EventBus eventBus);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

上面提到的其他人的地方只是您URL的一种表示.

谷歌的活动场所实施涉及许多对象.这是一个帮助您理解的模式.你会发现活动只是整个活动的一小部分.您可以在本文中的博客中找到更多详细信息

在此输入图像描述


Pet*_*ego 7

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

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

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