2015-02-10 78 views
2

尽管可以将观察者附加到多个提供者,但推荐的模式是仅将IObserver实例附加到一个IObservable实例。将IObserver分配给多个IObservable实例

取自Observer Design Pattern Best Practices

我没有看到任何明显的理由,为什么建议只将观察者分配给一个observable。事实上,我想要做的就是不断刷新一个取决于多个变化值的统计量。

在我看来,像MSDN建议我创建一个专门的观察​​员类的实例,我想观察每一个值,而我的直觉是让我的统计类直接分配给IObservables。

什么是“正确”的方式来实现这个,以及为什么我不应该把我的类分配给多个observables的原因是什么?

+1

如果你有一个观察者,观察多个observable,你的数据可能会失去同步。那将是我的第一个想法,在你不关心的情况下,那么这不会是一个问题。当你无法真正从数据集中区分出来时,你如何做出你该做什么的决定。其次,线程如何实现,这可能会导致问题吗? – 2015-02-10 13:00:03

+0

我认为这是一个很好的问题,我期待看看是否会有任何*理智*答案 – Tom 2015-02-10 13:03:58

+0

哦..我认为Callum已经有一个好点 - 在大多数情况下,当我想观察多个值,我想来处理那些不同的变化,但我只能在IObserver实现中实现一个OnNext()方法。在我的情况下,这并不重要,但我看到这会如何导致一般问题。不过,我不认为线程会是一个问题,因为观察者可以随意以任何顺序触发他们的通知。还有其他问题吗?否则,我会忽略这种“最佳做法”。 – 2015-02-10 13:13:16

回答

1

据我所知,这个“最佳实践”没有什么好的理由。

我只能看到一种情况,您可能想要这样做,但它当然不构成将此称为“最佳做法”的理由。

假设您需要知道发出通知的可观察者是谁,并且假设observable不通过的value参数标识自己。然后,您必须为每个observable实例化不同的观察者,并将observable作为构造函数参数传递给观察者(* 1)。

在你的情况下,你不需要知道发出通知的可观察者是谁,所以这种情况不适用于你。 (* 1)事实上,正是为了避免你不必实例化不必要的观察者,许多框架都要求任何通知都应该包含对通知发起者的引用。