ReactiveUI (RxUI) против реактивных расширений

Из http://docs.reactiveui.net/en/index.html:

ReactiveUI - это среда MVVM, которая позволяет использовать Reactive Расширения для .NET для создания элегантных, тестируемых пользовательских интерфейсов, которые работать на любой мобильной или настольной платформе.

Является ли RxUI каким-то образом отличается от Reactive Extensions?

Почему я должен отдавать предпочтение RxUI над MVVMCross/light + Rx? Что такого особенного? Может ли RxUI делать то, что Rx не может? Является ли это более кратким? Это более уютно?

Я видел пример на странице github https://github.com/reactiveui/ReactiveUI#a-compelling-example. Но не могу ли я сделать то же самое с Rx?

P.S. Есть ли где-нибудь документ API?

Ответ 1

Вы включили сюда много вопросов, поэтому я отвечу им один за другим.

Является ли RxUI каким-то образом отличается от Reactive Extensions?

Да. Reactive Extensions - это "библиотека для компоновки асинхронных и основанных на событиях программ с использованием наблюдаемых последовательностей и операторов запросов типа LINQ". Это не имеет никакого отношения к пользовательскому интерфейсу. Rx предоставляет вам общую абстракцию по потоку данных.

RxUI - это структура MVVM, что означает это библиотека классов, помогающая вам реализовать шаблон MVVM в вашем приложении.

Может ли RxUI делать то, что Rx не может? Является ли это более кратким? Это более уютно?

Он служит другой цели. Rx предоставляет набор методов, которые обычно помогают вам перемещать данные в приложении. RxUI используется для создания пользовательских интерфейсов. Он использует Rx под капотом и также предоставляет API-интерфейс Rx (а именно IObservble<T>) из его компонентов.

Например, ICommand реализация в ReactiveUI, называемая ReactiveCommand, предоставляет свойство с именем ThrownException, которое имеет тип IObservable<Exception> (вы можете считать его "последовательностью ошибок" ).

Обратите внимание, что, хотя тип интерфейса IObservable<T> является частью библиотеки базового класса .Net, буквально все полезные функции, работающие с этим типом, включаются в библиотеку Reactive Extensions.

Но не могу ли я сделать то же самое с Rx?

Нет, потому что, например, Rx не предоставляет вам реализацию ICommand, жизненно важную часть каждой инфраструктуры MVVM.

Почему я должен отдавать предпочтение RxUI над MVVMCross/light + Rx? Что такого особенного?

Если вы хотите активно использовать Reactive Extensions в своем приложении, вы можете использовать RxUI (а не другую структуру MVVM), потому что они очень хорошо интегрируются друг с другом. Комбинированные, они предоставляют вам множество функций из коробки (посмотрите, например, ReactiveCommand или WhenAny.

Как говорится, как сказал ему Пол Беттс (создатель RxUI):

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

RxUI определенно является "Буфетным столом" (возьмите то, что вы хотите!), а не семь блюд:)

И, наконец:

P.S. Есть ли где-нибудь документ API?

Да, есть! Посмотрите здесь: https://reactiveui.net/api/

В качестве примечания, не стесняйтесь просматривать раздел "Реактивное программирование" , который объяснит вам некоторые основные термины и понятия стоящий за рамкой:)