2014-11-21 38 views
-1

我有一些类,只要在类中发生变化就调用观察者。如果观察者具有隐式序列依赖性会怎么样?

观察员的一些例子:

  • 如果在实例的值改变,旧版本的实例的完整副本并储存在撤消堆栈
  • 如果在一个值实例更改,还需要更新其他一些值

观察者被存储在类本身或存储在存储特定类的所有实例的池中。

问题在于应该调用观察者的顺序变得重要。在这种情况下,应该在其他观察者之前调用在撤消堆栈上放置副本的观察者。否则,撤销堆栈包含不正确的“先前信息”。

我看到几个方法来解决这个问题,但没有干净的:

  • 我可以提供撤销逻辑特定的观察者接口(但为什么我的类需要知道的关于撤销-观察者?)
  • 我可以要求观察员有优先号码,这样他们就可以表明自己的优先级
  • 我可以添加观察员的多个级别(但观察家怎么能知道它们的优先级是相对于其他观察员什么?):1级,等级2 ......(但是,观察员怎么知道他应该在哪个级别注册自己?)
  • 我可以观察者之间添加依赖(但我怎么能肯定,观察员知道所有其他相关的观察者?)

所以:问题:你会怎么做,如果观察者需要在已知序列被调用,而不在模块之间引入不需要的依赖关系或引入不清洁的概念?

回答

0

观察者不应被保证以任何顺序被调用。如果代码尝试确保以正确的顺序调用它,则可能会在运行时发生变化,这会引发更糟的问题。

也许观察者有可能直接观看撤消/重做堆栈等待数据被放置在那里吗?