ReactiveUI(RxUI)与Reactive Extensions

tow*_*120 16 c# system.reactive reactiveui

来自http://docs.reactiveui.net/en/index.html:

ReactiveUI是一个MVVM框架,允许您使用Reactive Extensions for .NET创建在任何移动或桌面平台上运行的优雅,可测试的用户界面.

RxUI与Reactive Extensions有什么不同?

为什么我更喜欢RxUI而不是MVVMCross/light + Rx?有什么特别的?RxUI可以做一些Rx不能做的事情吗?它更简洁吗?它更舒适吗?

我在github页面https://github.com/reactiveui/ReactiveUI#a-compelling-example上看到了一些例子.但是我不能只用Rx做同样的事情吗?

PS那里有API doc吗?

pmb*_*nka 31

你在这里提到了很多问题,所以我会逐一回答.

RxUI与Reactive Extensions有什么不同?

是.Reactive Extensions"通过使用可观察序列和LINQ样式查询运算符来编写异步和基于事件的程序的库".它与UI无关.Rx为您提供了对数据流的一般抽象.

RxUI是一个MVVM框架,这意味着它是一个类库,可以帮助您在应用程序中实现MVVM模式.

RxUI可以做一些Rx不能做的事情吗?它更简洁吗?它更舒适吗?

它有不同的用途.Rx提供了一组方法,通常可以帮助您移动应用程序中的数据.RxUI用于创建用户界面.它在引擎盖下使用Rx,并且还IObservble<T>从它的组件中公开Rx类型的API(即).

例如,ICommand的实施ReactiveUI,叫ReactiveCommand,公开了一个名为属性ThrownException,它的类型的IObservable<Exception>(你可以把它读作"一个错误的序列").

请注意,虽然IObservable<T>接口类型是.Net基类库的一部分,但实际上所有使用此类型操作的有用函数都包含在Reactive Extensions库中.

但是我不能只用Rx做同样的事情吗?

不,因为 - 例如 - Rx没有为您提供ICommand实现,这是每个MVVM框架的重要组成部分.

为什么我更喜欢RxUI而不是MVVMCross/light + Rx?有什么特别的?

如果您想在应用程序中大量使用Reactive Extensions,您可能更喜欢使用RxUI(而不是其他MVVM框架),因为它们彼此之间的集成非常好.结合起来,它们为您提供了大量开箱即用的功能(例如,检查ReactiveCommandWhenAny.

话虽这么说,正如Paul Betts(RxUI的创造者)所说:

您可以将ReactiveUI与其他MVVM框架一起使用,您不需要提交其中一个.RxUI中的许多方法(如WhenAny)可以处理任何对象,并在运行时确定如何最好地连接它们.

RxUI绝对是自助餐桌(拿你想要的!),而不是七道菜的餐:)

最后:

PS那里有API doc吗?

就在这里!看看这里:https://reactiveui.net/api/

作为旁注,请随时浏览文档的Reactive Programming部分,它将向您解释框架背后的一些基本术语和概念:)

  • 好吧,回答这样的问题真的很难/不可能(请参阅 http://ericlippert.com/2012/12/17/performance-rant/ 了解原因!)。另外,您的意思是*Rx* 实现异步性吗?因为 RxUI 没有实现类似的东西。此外,RxUI 可以很好地与 Rx 和 TPL(又名异步等待)互操作。 (2认同)
  • 查看 http://reactivex.io/documentation/scheduler.html 了解 Rx 如何处理多线程。您可能还想问一个单独的问题,因为这个主题有点复杂。 (2认同)
  • 这确实是一个很好的问题,您应该将其作为一个单独的问题而不是作为注释来提出:)我只是向您暗示-_Rx默认为单线程_,因此默认情况下,“ subscribe”将在您使用的任何线程上执行将数据推入序列。请注意,从现在开始,我将仅回答与RxUI与Rx差异有关的问题,以便遵循有关评论讨论的SO准则(请参阅http://stackoverflow.com/help/privileges/comment):) (2认同)