ReactiveUI与MvvmCross

时间:2013-07-10 09:21:03

标签: mvvmcross reactiveui

标题说明了一切。根据您的经验,两个框架之间的关键区别是什么? 什么时候我们应该使用另一个?。

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

3 个答案:

答案 0 :(得分:10)

  

但这不是排他性的 - ReactiveUI可以与非反应性代码一起使用

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

RxUI绝对是一张自助餐桌(拿你想要的东西!),而不是七道菜的餐:) MvvmCross肯定是一款以你的应用为基础的绝佳选择,让团队尝试如何做到真棒他们在同一个应用程序中一起工作。报告回来!

答案 1 :(得分:9)

  

两个框架之间的关键区别是什么?

一个以Reactive扩展为中心,一个基于更传统的Mvvm编码。

但这不是独占的 - ReactiveUI可以与非反应性代码一起使用,MvvmCross可以与反应式扩展一起使用。

  

什么时候应该使用另一个?

它们都是很棒的框架(IMO)。

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

答案 2 :(得分:9)

这是一个老问题,但我想分享我的2美分。

我在同一个跨平台解决方案中使用MvvmCross和ReactiveUI,适用于iOS,Android和Windows。

我想说我的解决方案基于MvvmCross,因为App类,应用程序如何启动以及ViewModel导航都遵循MvvmCross'办法。但我也使用了ReactiveUI的几个主要功能:

  1. ReactiveCommand

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

  2. ReactiveList及其派生列表

    这是一个我想向任何编程MVVM推荐的类,它几乎解决了我在ObservalbeCollection中的所有痛点。单独使用CreateDerivedCollection本身就是我在项目中包含ReactiveUI的全部原因。

  3. MessageBus

    我担心自己被UI主线程的自动编组所破坏。如果我在任务池或UI线程中,我不必担心,我只需要调用SendMessage。 (这与MvvmLight的实施非常不同,这是我2年前离开MvvmLight的主要原因,对不起)

  4. 当我使用上述功能时,我不在乎他们是否有反应,我只是使用它们,因为它们非常符合我的需求。 (事实上​​,ReactiveCommandReactiveListMessageBus都是被动的)

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

    1. MvvmCross插件。

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

    2. MvvmCross的教程

      有很多关于MvvmCross和Youtube视频的教程。我无法想象这些事情会付出多少努力。

      老实说,我通过MvvmCross学习Xamarin。

    3. MvvmCross与Xamarin的整合

      有时我无法判断MvvmCross或Xamarin是否提供了类,如果不是Mvx前缀。我检查了我的项目,我的UI代码的几乎所有基类都是MvxSomething(我不使用Xamarin.Forms)。我不知道基类的Mvx版本究竟提供了什么,我只是使用它们并且它们可以工作。

    4. 我仍然在学习这两个框架,但我希望有一天能够合并它们。