我正在使用GWT编写一个web应用程序,并遵循GWT网站上的MVP tutorial (即使用History进行导航)。
我对使用侧边栏进行导航的最佳方式感到有点困惑(例如,单击导航链接会更改主窗口中的内容。见下文)
--------------------
| | |
| nav | main |
| | window |
| | |
| | |
--------------------我认为一种可能的方法是在超文本标记语言中声明两个用于导航和内容的<div>标记。例如:
@Override
public void onValueChange(ValueChangeEvent<String> event) {
...
if (token.equals("navigation")) {
presenter = new NavigationPresenter(rpcService, eventBus, new NavigationView());
presenter.go(RootPanel.get("navigation"));
}
...
if (token.equals("content")) {
presenter = new ContentPresenter(rpcService, eventBus, new ContentView());
presenter.go(RootPanel.get("content"));
}
...
}我不确定这是否是解决这个问题的最好方法。(我猜导航面板和内容窗口之间的双向通信可以通过EventBus完成?此方法在更改UI时是否灵活(例如,对于移动网站)
我想知道人们会建议什么是最好的方式。我读过很多关于Activities and Places的文章,并经常深入讨论,但据我所知,这些与MVP架构有些不同(活动和地点对browser history management很有用,尽管我认为我使用History涵盖了(?))
如有任何建议,我们将不胜感激。
发布于 2013-03-26 23:42:16
是的,你是对的:Activies and Places是关于历史和导航管理的,这是GWT中的一个框架。MVP仅仅是一种架构设计模式。您可以使用您链接的文章中所示的框架来实现MVP。
在您的示例中,您可以按您所说的做,但我会将每个视图设为(惰性的)单例,以避免任何潜在的代价高昂的重新创建。就我个人而言,我不喜欢这种方式,你最终会用(这么多) HasXxx接口来定义你的Display。
我认为,如果历史记录管理很重要,那么选择Activities and Places几乎是不需要动脑筋的(至少对我来说是这样,至少在定义应用程序的框架方面是这样)。Here你可以找到一篇非常好的文章来帮助你入门。您将看到您的用例有多常见:您必须定义显示区域(导航和主要区域),这些区域将在位置更改时做出反应(感谢活动管理器),并创建/重新启动活动,这些活动将反过来更新UI。这样,您就实现了某种应用程序范围内的MVP,其中的展示者就是活动。
就MVP而言,没有最好的方法:part 1、part 2和MVP with A&P只是实现相同目标的不同方法:分离表示和业务逻辑,以及纯粹的junit测试。简单地选择你喜欢的。参考群组上的this文章。
希望这能帮你入门。
发布于 2013-03-27 04:28:35
对于我的应用程序,我使用ClientFactory,就像在GWT文档中一样,视图使用单例。
这样,应用程序结构(包括菜单)也是ClientFactory中引用的单例,因此每个其他视图都可以通过其接口直接访问它。
例如,一些视图可能会在标题中推送一些图像,隐藏菜单以显示视频,或者您需要的任何内容。大多数时候,应用程序的结构不需要单独的活动/位置来将其状态“持久化”在历史堆栈中……
我知道大多数人不喜欢视图相互调用,我也是,唯一的例外是应用程序的结构视图,这是一种特定的视图:它有一个不是活动的展示者,并且视图本身是永久显示的。
通过通知在你的应用程序结构和其他视图之间进行交流,将使你的应用程序成为一个意大利面碗。我曾经使用过像PureMVC这样的框架,它们在很大程度上依赖于事件/通知来在视图之间通信,而这种分离有一个高昂的代价:可维护性和代码可读性。
https://stackoverflow.com/questions/15635965
复制相似问题