ReactiveUI против MvvmCross

Название говорит все. Основываясь на вашем опыте, какое ключевое различие между обеими структурами?. Когда мы должны использовать один над другим?

Предполагаемое использование: кросс-платформенная разработка (Windows 8, iOS, Android, WindowsRT, Mac).

Ответ 1

Но это не исключение - ReactiveUI можно использовать с нереактивным кодом

Кроме того, вы можете использовать ReactiveUI наряду с другими фреймворками MVVM, вам не нужно совершать одно или другое. Многие методы в RxUI, такие как WhenAny, работают с любым объектом и определяют во время выполнения, как наилучшим образом подключиться к ним.

RxUI - это, безусловно, таблица буфетов (возьмите то, что вы хотите!), а не семь блюд.:) MvvmCross - отличный выбор для вашего приложения, и было бы замечательно, если бы команда проверила, как они работают вместе в одном приложении. Отправляйся!

Ответ 2

Какое ключевое различие между обеими структурами?

Один сосредоточен на Reactive extensions, один основан на более условном Mvvm-кодировании.

Но это не исключение - ReactiveUI можно использовать с нереактивным кодом, а MvvmCross можно использовать с реактивными расширениями.

Когда мы должны использовать один над другим?

Они оба отличные рамки (IMO).

Выбор того, использовать ли фреймворк и который использовать, зависит от вас и вашей команды.

Ответ 3

Это старый вопрос, но я хотел бы поделиться своими 2 центами.

Я использую MvvmCross и ReactiveUI в одном кросс-платформенном решении для iOS, Android и Windows.

Я бы сказал, что мое решение основано на MvvmCross, потому что класс App, то, как приложение запускается, и Навигация в ViewModel следуют по пути MvvmCross. Но я также использую несколько ключевых возможностей ReactiveUI:

  • ReactiveCommand

    Мне очень нравится его функция автоматического отключения (CanExecute, IsExecuting), когда она привязана к кнопке.

  • ReactiveList, и он получил список

    Это класс, который я бы рекомендовал любому программисту MVVM, он решил почти все мои болевые точки в ObservalbeCollection. Использование только CreateDerivedCollection может быть всей причиной того, что я включаю ReactiveUI в свой проект.

  • MessageBus

    Я боюсь, что я был испорчен его автоматической маршалингом в основной поток UI. Мне не нужно беспокоиться, если я в пуле задач или потоке пользовательского интерфейса, я просто вызываю SendMessage. (Это очень отличается от реализации MvvmLight, и это главная причина, по которой я покинул MvvmLight 2 года назад, извините)

Когда я использую перечисленные выше функции, мне все равно, реактивны они или нет, я просто использую их, потому что они очень хорошо меняют. (Фактически, ReactiveCommand, ReactiveList и MessageBus являются реактивными)

Можно ли использовать только ReactiveUI? Я также задал этот вопрос самому себе. Думаю, я пропущу что-то из MvvmCross:

  • Плагины MvvmCross.

    Я использую несколько плагинов из MvvmCross, и я действительно хочу, чтобы каждый плагин был совместим как с MvvmCross, так и с ReactiveUI. (Возможно, они уже есть, я просто не проверял, потому что я уже использую MvvmCross для обработки плагинов.)

  • Учебники MvvmCross

    В MvvmCross и Youtube есть много учебников. Я просто не могу представить, как много усилий накладывается на такие вещи.

    Я изучаю Xamarin by MvvmCross, если честно.

  • Интеграция MvvmCross с Xamarin

    Иногда я не могу определить, предоставлен ли класс MvvmCross или Xamarin, если не для префикса Mvx. Я проверил свой проект, почти все базовые классы моего кода пользовательского интерфейса - MvxSomething (я не использую Xamarin.Forms). Я не знаю, что именно обеспечивается версией Mvx базовых классов, я просто использую их, и они работают.

Я все еще изучаю обе 2 фреймворка, но я хочу, чтобы они были объединены в один прекрасный день.