Rx扩展方法的命名约定



那么,如果我正在为另一个库中的某个类型编写一个扩展方法,将该类型转换为Rx-IObservable<T>,那么具体的约定是什么?我问是因为我认为AsObservable是一条路,但我也见过ToObservable。我不清楚在什么时候使用哪一个,或者是否有任何真正的惯例。

会不会是ToObservable被保留用于将预期产生单个事件的东西转换为IObservable<T>,而AsObservable被保留用于把预期产生事件序列的东西转换成IObervable<T>

除非您有充分的理由编写自己的跨对偶运算符,否则在处理Enumerables和Observables时不需要编写"to"后缀。

观察以下事实:

  • ToObservable预计将基于拉的序列转换为基于推的
  • ToEnumerable有望将基于推送的序列转换为基于pull-based的
  • AsObservable预计将基于推送的类型包装为IObservable< T >
  • AsEnumerable预期将基于拉的类型包装为IEnumerable< T >

因此,当您编写切换源的对偶性的方法时,应该使用To,而当生成的对偶性与源的对偶相同时,应使用As

在大多数情况下,您将为自己的方法使用As,因为ToObservableToEnumerable的交叉对偶运算符已经为您编写好了。

资料来源:个人经历,MSDN文档(上图),Erik Meijer本人。

我不知道有任何官方指导,但我会使用的主要指标是查看你正在做的工作量。在大多数情况下,要做大量的工作(这本身就是主观的),比如将IEnumerable变成IOobservable,我会使用ToObservable。当该方法完成相当琐碎的工作时,就像Observable.AsObservable扩展方法一样,AsObservable似乎是更好的选择。这两种方法之间的另一个显著区别是,AsObservable只不过是一个类型转换,并且不会对参数的行为进行任何实际更改,但Observable.ToObservable(IEnumerable<T>)返回的对象具有明显不同的语义。

相关内容

  • 没有找到相关文章

最新更新