在阅读了一段时间并观看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/
我真的很困惑。我想要一站式线程来结束所有的混乱。
答案 0 :(得分:21)
TL; DR:地方和活动与MVP无关。
地方是关于导航到您的应用:您从一个地方到另一个地方。并且活动建立在地方之上,以帮助将“你看到的”与“你在哪里”结合起来:
这些“部分”(地区)中的每一个都由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
答案 2 :(得分:7)
活动是演示者。地方只是历史令牌的包装。
混乱始于Google IO视频,其中引入了MVP GWT概念,但没有给出实施。所以人们开始自己动手。然后谷歌写了2.1文档,他们详细说明了这个概念,并给出了一些示例代码供下载。在2.2的后期,他们介绍了他们的全部实施,活动等。
所以,如果你想进入MVP路线,你需要选择你的实施。活动可能是最好的,因为它是官方的。
答案 3 :(得分:2)
只要您将它们视为两种开发模式,就可以很容易地将它们分开。 MVP是一种用于分离关注点的模式,“活动和场所”是一种用于URL和历史管理的工具。
这是一篇很好的文章,可帮助消除任何混淆,MVP, Activities and Places Confusion
答案 4 :(得分:0)
有两个独立的维度 设计模式 - 没有模式 - MVP
导航和屏幕遍历 - 没有导航 - 活动和地点
您的应用程序可以遵循以下其中一项