3

我正在使用 GWT 编写一个 Web 应用程序,并遵循 GWT 网站上的MVP 教程(即History用于导航)。

我对使用侧边栏进行导航的最佳方式有点困惑(即单击导航链接会更改主窗口中的内容。见下文)

--------------------
|     |            |
| nav |   main     |
|     |    window  |
|     |            |
|     |            |
--------------------

我看到的一种可能的方法是<div>在 HTML 中声明两个标签用于导航和内容。例如:

@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 时是否灵活(例如移动网站))

我想知道人们会建议什么是解决这个问题的最佳方式。我已经阅读并经常讨论有关活动和地点的讨论,但据我了解,这些与 MVP 架构有些不同(活动和地点对于浏览器历史管理很有用,尽管我认为我的使用History涵盖了(?))

任何建议,将不胜感激。

4

2 回答 2

3

是的,你是对的:Activies and Places是关于历史和导航管理的,里面有一个框架GWTMVP只是一种架构设计模式。您可以MVP使用您链接的文章中所示的框架来实现。

在您的示例中,您可以按照您说的做,但我会让每个视图都成为(惰性)单例,以避免任何潜在的昂贵的重新创建。我个人不喜欢这种方式,你最终Display会根据(这么多)HasXxx接口来定义你的 s 。

我认为,如果历史管理很重要,那么选择Activities and Places几乎是一件轻而易举的事(至少对我来说,至少要定义应用程序的骨架)。在这里,您可以找到一篇非常好的文章来帮助您入门。您将看到您的用例有多常见:您必须定义显示区域(导航和主要区域),这些区域将对位置更改做出反应(感谢活动管理器)并创建/重新启动将反过来更新 UI 的活动. 通过这种方式,您可以实现某种应用程序范围MVP,其中演示者是活动。

MVP目前而言,没有最好的方法第 1部分、第 2 部分带有 A&P的 MVP 只是实现相同目标的不同方法:分离表示和业务逻辑,以及纯 junit 测试。只需选择您喜欢的。请参阅关于群组的帖子以供参考。

希望能帮助您入门。

于 2013-03-26T15:42:15.867 回答
0

对于我的应用程序,我使用 ClientFactory,就像在 GWT 文档中一样,使用单例作为视图。

这样,应用程序结构(包括菜单)也是 ClientFactory 中引用的单例,因此每个其他视图都可以通过其接口直接访问它。

例如,某些视图可能会在标题中推送一些图像,隐藏菜单以显示视频,或者您需要的任何内容。大多数时候,应用程序的结构不需要单独的活动/位置来将其状态“持久”在历史堆栈中......

我知道大多数人不喜欢视图相互调用,我也是,唯一的例外是应用程序的结构视图,这是一种特定的视图:它有一个不是活动的演示者,以及视图本身永久显示。

通过通知在您的应用程序结构和其他视图之间进行通信将使您的应用程序成为意大利面碗恕我直言。我曾使用过像 PureMVC 这样的框架,它们在很大程度上依赖于事件/通知在视图之间进行通信,并且分离具有很高的成本:可维护性和代码可读性。

于 2013-03-26T20:28:34.827 回答