gpt4 book ai didi

GWT MVP 在地点更改时更新事件状态

转载 作者:行者123 更新时间:2023-12-04 14:16:07 26 4
gpt4 key购买 nike

在地点更改时更新事件状态的最佳做法是什么?假设您有一个带有 View 的事件,该 View 显示类别列表和类别中的项目列表。如果选择了不同的类别,则应用程序会使用类别 ID 转到新位置。然后我只想刷新项目,而不是创建也重新读取类别列表的新事件。

我目前的做法是这样的:

public class AppActivityMapper implements ActivityMapper {

private ItemListActivity itemListActivity;

...

public Activity getActivity(final Place place) {
final Activity activity;

if (place instanceof ItemListPlace) {
if (itemListActivity == null) {
itemListActivity = new ItemListActivity((ItemListPlace) place, clientFactory);
} else {
itemListActivity.refresh((ItemListPlace) place);
}
activity = itemListActivity;
} else {
itemListActivity = null;
}

...
return activity;
}

...

最佳答案

替代方案是:

  • PlaceChangeEvent s 来自事件(然后您可以使用 FilteredActivityMapperCachingActivityMapper 将事件缓存在您的 ActivityMapper 中,以便它减少到仅在被询问时创建新事件)。 †
  • 让一些组件听 PlaceChangeEvent s 并将它们转换为面向业务的事件,然后事件监听这些事件而不是 PlaceChangeEvent s,其他同上。
  • 将事件与“屏幕”分离,使用 reset() 使“屏幕”成为单例方法并从事件的 start 调用该方法(在这种情况下,可能将类别 ID 作为参数传递)。作为单例的“屏幕”可以确保只加载一次类别列表。
  • 在您的情况下,您也可以简单地将类别列表放在共享缓存中,这样您就不必通过创建新事件来重用您的事件,类别列表将被检索一次并放入缓存中,随后的事件实例将只使用缓存中的内容。这与上面的类似,但更简单,并且缓存可以被应用程序的其他部分使用。

  • 我个人更愿意采用你的方法(有一个小异常(exception),见下文),因为它是最简单/最简单的。将事件与“屏幕”解耦也是一种选择; GWT 团队开始在 Expenses 示例中探索这种方法(使用 MVP 将事件责任与演示者责任分离),但不幸的是,它从未完成。

    除此之外,我认为目前还没有真正出现任何最佳实践。

    †。我不喜欢将我的事件与它们使用的地方耦合(我也不太喜欢 goTo 调用的耦合,但还没有找到一个干净简单的替代方案),所以我会而不是选择这个选项;同样,我不会将位置传递给事件构造函数和 refresh像您一样的方法,而是从该位置提取信息并将其传递给事件(例如,在您的情况下,只为事件提供类别 ID,而不是 ItemListPlace 实例;然后我会简单地调用 setCategory在所有情况下,甚至不将类别 ID 传递给构造函数)。

    关于GWT MVP 在地点更改时更新事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12073123/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com