Java GWT:举例说明地点、历史和MVP
假设我想创建一个由两个简单“屏幕”组成的GWT应用程序:Java GWT:举例说明地点、历史和MVP,java,gwt,android-activity,mvp,gwt-history,Java,Gwt,Android Activity,Mvp,Gwt History,假设我想创建一个由两个简单“屏幕”组成的GWT应用程序: 在这个简单的例子中,用户在应用程序首次启动时看到的主菜单(他们转到特定的URL)-忘记登录屏幕等;及 当用户单击主菜单上的按钮时,取代主菜单的编辑首选项“页面”/屏幕/视图;此编辑首选项屏幕还有一个按钮,可将用户带回主菜单;因此 用户只需在主菜单和编辑首选项“页面”(这是GWT,所以它实际上是一个单页应用程序)之间来回切换一整天 因此,这方面的伪代码可能如下所示: public class MainMenuPresenter impl
- 在这个简单的例子中,用户在应用程序首次启动时看到的主菜单(他们转到特定的URL)-忘记登录屏幕等;及
- 当用户单击主菜单上的按钮时,取代主菜单的编辑首选项“页面”/屏幕/视图;此编辑首选项屏幕还有一个按钮,可将用户带回主菜单;因此
- 用户只需在主菜单和编辑首选项“页面”(这是GWT,所以它实际上是一个单页应用程序)之间来回切换一整天
public class MainMenuPresenter implements Presenter {
// mainMenuScreen may be a Composite that contains a Button for
// switching/navigating to the EditPreferencesView
private MainMenuView mainMenuScreen;
}
public class EditPreferencesPresenter implements Presenter {
// editPrefsScreen may be a Composite that contains a Button for
// switching/navigating back to the MainMenuView
private EditPreferencesView editPrefsScreen;
}
问题:
场所
及其相关的活动
如何适应这种范式?如果要在MVP和场所/活动之间进行选择,那么使用活动/场所范例,这个示例会是什么样子MainMenuView
设置为历史上的一个“位置”,将EditPreferencesView
设置为第二个“位置”,然后允许用户点击后退/前进浏览器按钮并在它们之间切换我还对
地点
如何与活动管理器
相关联,以及如何/谁触发/处理地点更改事件
,感兴趣,但我会留到以后再说;我需要先了解这些概念,然后才能继续这些概念。提前谢谢 我将尝试概述一个适用于您的情况的示例设置。有很多变化,但我想集中讨论一个简单的变化(并鼓励您考虑在哪里可以进行调整)
1.定义URL标记
选择一些URL标记,如“#mainmenu”和“#editprefs”,它们将附加到主机页的URL。它们将用于浏览器历史记录,因此后退和前进按钮可以工作等
URL处理将由DefaultHistorian自动为您完成。PlaceChangeEvent将由PlaceController触发
2.映射标记以放置对象
Place对象只是令牌的面向对象抽象-这很有用,因为更高级的令牌也可以接受需要解析的参数。您需要一种将标记映射到放置对象的方法。这是PlaceHistoryMapper的责任
在我的示例中,我们只需手动实现PlaceHistoryMapper,将“#mainmenu”映射到MainMenuPlace,并将“#editprefs”映射到EditPreferencesPlace
[或者,也可以使用@WithTokenizers注释并为每种类型的位置实现(空)PlaceTokenizer。然后可以使用@Prefix注释指定“mainmenu”和“editprefs”作为标记。]
3.绘制活动地点图
Place对象本身不做任何事情——正如上面所解释的,它基本上只是一个抽象标记。实际代码将在活动中运行。因此,您必须将位置映射到活动。这是ActivityMapper的责任
在我的示例中,您将实现它以将MainMenuPlace映射到MainMenuActivity,并将EditPreferencePlace映射到EditPreferenceActivity
4.活动和主持人
为简单起见,在我的示例中,活动还将实现Presenter。所以MainMenuActivity将实现MainMenuPresenter。这根本没有必要,但可能是一个很好的起点。这就是场所+活动可以与MVP连接的地方。这两个概念互不需要,但它们可以很好地协同工作:
- Activities+Places基本上是关于历史标记和活动之间的连接
- MVP基本上是演示者和视图之间的连接
"#mainMenu"
---(PlaceHistoryMapper)---> MainMenuPlace
---(ActivityMapper)---> MainMenuActivity implements MainMenuPresenter