【问题标题】:What's the use of multiple GWT ActivityManagers and ActivityMappers?多个 GWT ActivityManager 和 ActivityMappers 有什么用?
【发布时间】:2012-11-10 22:25:20
【问题描述】:

终于想到你应该编写一个 ActivityMapper 来解析/检查其 getActivity(Place) 方法通过的 Place 子类,并返回适当的 @ 987654324@呈现给用户。

所以这让我想到:在您的应用中需要许多不同的 Place 子类是有道理的,每个子类代表一个不同的可收藏 URL/状态。

但为什么一个应用需要不止 1 个 ActivityManagerActivity Mapper?似乎没有 GWT 对哪个 Place 映射到哪个 Activity 施加限制...

我听说过一些策略,每个显示区域都有自己的ActivityManager。我也觉得这样只会让你的项目更复杂,而没有提供任何真正的好处。提前致谢!

【问题讨论】:

    标签: java gwt gwt-places gwt-activities


    【解决方案1】:

    已经编写了一个包含 10 个这样的 显示区域 的应用程序,我可以向您保证,它使我们的项目比使用单个显示区域要简单得多(我们可以删除几个区域,然后在没有活动的情况下处理,但仍然)。

    当您的显示区域并非全部同时更改(通常,您的主要内容比您的外围设备更频繁地更改)时,它被证明是最有用的aside 内容):假设您正在编辑一个非常复杂的实体并将其拆分为数十个屏幕,屏幕上的某些内容总是相同(例如,top 实体的 summary,为用户提供上下文)。

    专业化您的活动也很棒(关注点分离,每个活动一个关注点)。例如,在 stackoverflow(如果是 GWT 应用程序)上,右侧的侧边栏可能与问题及其答案在同一个 activity 中,但如果你将事物分成不同的活动,每个活动都会变成更简单,因此更易于维护。

    最后,可以更轻松地重组专业活动。例如。拆分为 2 个活动的主详细信息可以轻松地从“同一屏幕上的主/子”(与显示邮件列表和所选消息的大多数邮件客户端相同)更改为“主到子并返回到主"(默认情况下与 GMail 一样,与大多数移动应用程序一样)。而且这种重组并不是要改变您在应用程序中的导航方式,而是要根据外形重用相同的活动来进行不同的导航(使用 MVP,您还可以在不更改演示者的情况下调整视图)。


    话虽如此,确实有很多应用程序不需要/不需要这样做。这并不意味着它没有用。

    【讨论】:

    • 我只是不明白如何在同一个页面/屏幕上存在多个活动,但是在浏览器的地址栏中对同一个 URL 进行标记。例如,如果右侧的侧边栏是与问题不同的活动,这意味着您将有两个地点映射到这两个活动,都在同一个 URL。我们如何在保持QuestionActivity 不变的同时更新SidebarActivity,同时更改URL(从而允许它在同一状态下被添加书签)?
    • Places/Activity 不需要更新浏览器历史记录 - 每个 PlaceController/ActivityManager 都可以管理自己的状态。同时考虑几个打开的浏览器窗口 - 是否有一个历史可以统治它们?同样,您可以有一个专门的 PlaceHistoryHandler 来按顺序读取每个 Place 并以某种方式加入它们:“page.html#place1:data|otherplace:|somethingoverhere:id123”。
    • @orionTurtle 一个地方映射到多个活动。在 StackOverflow(如果它是 GWT 应用程序)上,QuestionPlace(具有 id 属性;对于这个问题,例如,将是 #QuestionPlace:13326657)映射到 a)问题及其答案,b)“侧边栏中的“已标记”部分,c) 侧边栏中的“相关”部分。每个映射都在不同的ActivityMapper 中完成,每个映射都由一个不同的ActivityMapper 实例使用,该实例管理各种显示区域。我不会再次链接到我的博客,但真的会一遍又一遍地阅读它,直到一切都清楚为止。
    • @ColinAlworth:虽然这确实有效,但我想说,如果你认为你需要这样的东西,那么你就有用户体验和导航问题。不推荐使用框架集是有充分理由的,我们不要通过 JS 复活它们(减去可书签性问题)。 YMMV
    • 当然——我试图概述如何使用 A/P 来构建需要这种状态概念的现有应用程序的示例,而不是建议在浏览器中嵌入浏览器会是一个好主意想法。
    【解决方案2】:

    查看有关该主题的 Thomas Broyer 文章 http://blog.ltgt.net/gwt-21-activities-nesting-yagni/

    我尝试在一个 github 项目中实现他的想法:https://github.com/ronanquillevere/GWT-Multi-Activities

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2014-11-28
      相关资源
      最近更新 更多