ReactiveUI与MvvmCross的比较

17

标题已经说得很清楚了。根据您的经验,这两个框架之间的主要区别是什么?我们应该在什么情况下使用其中一个而不是另一个?

预期用途:跨平台开发(Windows 8,iOS,Android,WindowsRT,Mac)。

3个回答

12

我在iOS、Android和Windows的跨平台解决方案中同时使用了MvvmCross和ReactiveUI。

我会说我的解决方案基于MvvmCross,因为App类以及应用程序启动和ViewModel导航都遵循了MvvmCross的方式。但我也使用了ReactiveUI的几个关键特性:

  1. ReactiveCommand

我非常喜欢它的自动禁用功能(CanExecute,IsExecuting)当它绑定到一个按钮时。

  1. ReactiveList及其派生列表

这是一个我想推荐给任何编写MVVM的人的类,它已经解决了观察集合中几乎所有的问题。仅仅是使用CreateDerivedCollection方法就足够让我在项目中包含ReactiveUI。

  1. MessageBus

我担心我被它的自动调度到主线程的功能所宠坏了。我不需要担心自己是否在任务池或UI线程中,只需调用SendMessage。(这与MvvmLight的实现非常不同,这也是我两年前离开MvvmLight的主要原因,抱歉)

当我使用上述功能时,我并不在意它们是否是响应式的,我只是因为它们非常适合我的需求而使用它们。(事实上,ReactiveCommandReactiveListMessageBus都是响应式的)

我可以只使用ReactiveUI吗?我也问过自己这个问题。我想我会错过一些MvvmCross的东西:

  1. MvvmCross插件。

我使用了几个来自MvvmCross的插件,我真的希望每个插件都兼容于MvvmCross和ReactiveUI。(也许它们已经兼容了,但我没有检查,因为我已经使用MvvmCross处理了这些插件。)

  1. MvvmCross的教程

关于MvvmCross和Youtube视频的教程很多,我无法想象这些东西需要付出多少努力。

说实话,我是通过MvvmCross学习Xamarin的。

  1. MvvmCross与Xamarin的整合

有时候我分不清一个类是由MvvmCross还是Xamarin提供的,如果没有Mvx前缀的话。我检查了我的项目,几乎所有UI代码的基类都是MvxSomething(我不使用Xamarin.Forms)。我不知道Mvx版本的基类提供了什么,但我只需使用它们,它们就能正常工作。

我仍在学习这两个框架,但我希望它们有一天可以合并。


你如何在MvvmCross中使用ReactiveUI绑定命令?我知道如何在视图模型中添加命令,但不知道如何在视图中添加绑定。 - imckl
@Felix 你有一个结合了MvvmCross和ReactiveUI的示例项目吗? - Hackmodford

11

但这并不是排他的 - ReactiveUI可以与非响应式代码一起使用。

更进一步,您可以将ReactiveUI与其他MVVM框架一起使用,您无需承诺其中之一。 RxUI中的许多方法,例如WhenAny,适用于任何对象,并在运行时确定如何最佳连接它们。

RxUI绝对是自助餐(拿你想要的!),而不是七道菜 :) MvvmCross肯定是构建应用程序的好选择,有一个团队尝试它们如何在同一个应用程序中协同工作会很棒。报告回来吧!


10

这两个框架之间的主要区别是什么?

一个是以响应式扩展为中心,另一个则基于更传统的Mvvm编码。

但这并非互斥 - ReactiveUI可以与非响应式代码一起使用,而MvvmCross可以与响应式扩展一起使用。

我们应该在何时使用其中一个框架?

它们都是很棒的框架(在我看来)。

是否使用框架以及使用哪种取决于您和您的团队。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接