代码之家  ›  专栏  ›  技术社区  ›  Allain Lalonde

观察者模式过载

  •  3
  • Allain Lalonde  · 技术社区  · 15 年前

    我陷入了以下情况。它有一种我不喜欢的代码味道,但它的解决方案似乎很复杂,但方式不同。

    我有一个表示业务对象的场景图。我设计它是为了使业务对象本身尽可能简单。他们实际上是波乔斯。

    现在,一个实体可能被不同的节点显示在场景图的多个区域中。

    当实体更改时,所有相关的场景图节点都应更改。

    因为我一次在屏幕上有50000多个实体,所以我对在所有实体上使用观察者模式犹豫不决。

    因为所有的更改都是从视图开始的,所以现在我在场景图上递归,并强制重新加载与更改的实体相关联的所有节点。但感觉不对劲。

    有什么关于如何做得更好的建议吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   djna    15 年前

    业务对象==实体?其中有50k个节点在屏幕上表示为节点,有些实体有多个节点。用户操作更改实体的状态,因此必须更新某些节点。但实体当然不知道节点。

    我会让代理对象包装实体。他理解与节点的关系。实体的更新通过他进行,因此他可以完成更新,然后通知相关节点。这有效地避免了需要迭代查找更新的节点集。

        2
  •  2
  •   Jonathan Feinberg    15 年前

    实体应将其更新发布到单个队列中,然后由负责更新视图的对象轮询该队列。