CachingActivityMapper 有什么意义?

What's the point of CachingActivityMapper?

CachingActivityMapper 将 return 相同的 activity 实例,如果要求相同的 Place 两次或更多次。但是,如果我要 goTo(...) 一个等于当前位置的位置,PlaceController 将不会触发 PlaceChangeRequestEvent(最终不会触发 PlaceChangeEvent)。因此,监听这些事件的 ActivityManager 不会做任何事情,也就是说,在这种情况下它甚至不会向 CachingActivityMapper 请求 activity。

所以,我真的不明白 CachingActivityMapper 的意义。我错过了什么吗?

CachingActivityMapper 单独使用时几乎没有(甚至没有)用处。它实际上是介于 FilteredActivityMapper 和您的 ActivityMapper.

之间

原来的用例是master-detail;例如,对于邮件应用程序,有 2 ActivityManagers,一个用于邮件列表(主),另一个用于特定消息(详细信息),我们可以想象第三个带有菜单或树视图;让我们专注于 master:

  1. 当前位置是MailBox("inbox")
    1. FilteredActivityMapper 将地点按原样传递给基础 CachingActivityMapper
    2. 实际 ActivityMapper return 是 "inbox"
    3. 中邮件列表的 activity
  2. 用户点击列表中的一封邮件,要去一个新的地方Message(box="inbox", id="123")
    1. FilteredActivityMapper 将位置转换为 MailBox("inbox")
    2. CachingActivityMapper return 缓存的 activity,而不实际调用包装的 ActivityMapper;所以 ActivityManager 不会停止并启动 activity,或触摸它正在管理的 HasOneWidget

可以有变体,例如,detail 映射器可以缓存它看到的最后一个 Message 位置(Message地方不会包含"mail box"信息,即Message("123")),当它收到MailBox地方时,它会通过Message 放置到底层 CachingActivityMapper,这将 return 缓存 activity;这将允许 master 更改为新的邮箱,同时仍然在 detail 面板中显示相同的消息(GMail 与拆分显示的行为更多或不像这样)。