2016-01-11 9 views
10

Da http://docs.reactiveui.net/en/index.html:ReactiveUI (RxUI) vs reattivi estensioni

ReactiveUI è un framework MVVM che consente di utilizzare i reattivi Extensions for .NET per creare eleganti, interfacce utente testabili che corsa su qualsiasi cellulare o piattaforma desktop.

RxUI è in qualche modo diverso da Reactive Extensions?

Perché dovrei preferire RxUI su MVVMCross/light + Rx? Che cosa così speciale? RxUI può fare qualcosa che Rx non può? E 'più conciso? E 'più accogliente?

Ho visto un esempio sulla pagina github https://github.com/reactiveui/ReactiveUI#a-compelling-example. Ma non posso fare lo stesso con solo Rx?

P.S. C'è un documento API da qualche parte?

risposta

17

Hai incluso molte domande, quindi risponderò a uno a uno.

RxUI è in qualche modo diverso da Reactive Extensions?

Sì. Reactive Extensions è "una libreria per la composizione di programmi asincroni e basati su eventi utilizzando sequenze osservabili e operatori di query in stile LINQ." Non ha nulla a che fare con l'interfaccia utente in particolare. Rx fornisce un'astrazione generale su un flusso di dati.

RxUI è un framework MVVM, che significa it is a library of classes helping you implement MVVM pattern in your app.

RxUI può fare qualcosa che Rx non può? È più conciso? È più accogliente?

Ha uno scopo diverso. Rx fornisce un insieme di metodi, che generalmente ti aiutano a spostare i dati nella tua app. RxUI è usato per creare interfacce utente. Usa Rx sotto il cofano e espone anche l'API di tipo Rx (ovvero, IObservble<T>) dai suoi componenti.

Ad esempio, un ICommand attuazione in ReactiveUI, chiamato ReactiveCommand, exposes a property called ThrownException, che è di tipo IObservable<Exception> (si può leggere come "una sequenza di errori").

Si noti che mentre il tipo di interfaccia IObservable<T> fa parte della .Net Base Class Library, letteralmente tutte le funzioni utili che operano con questo tipo sono incluse nella libreria di Reactive Extensions.

Ma non posso fare lo stesso con solo Rx?

No, perché - ad esempio - Rx non fornisce un'implementazione ICommand, una parte vitale di ogni framework MVVM.

Perché dovrei preferire RxUI su MVVMCross/light + Rx? Che cosa così speciale?

Se si desidera utilizzare Estensioni Reactive nella propria app, è preferibile utilizzare RxUI (piuttosto che altri framework MVVM) perché si integrano perfettamente tra loro. Combinata, ci hanno fornito un sacco di funzionalità out of the box (check-out, per esempio, ReactiveCommand o WhenAny

Detto questo, as Paul Betts (creator of RxUI) stated it:.

è possibile utilizzare ReactiveUI accanto ad altri framework MVVM, Non è necessario eseguire il commit sull'uno o sull'altro.Molti metodi in RxUI come WhenAny funzionano su qualsiasi oggetto e determinano in fase di runtime il modo migliore per connettersi.

RxUI è sicuramente un tavolo buffet (prendi ciò che vuoi !), non un pasto di sette portate :)

E, infine:

P.S. C'è un documento API da qualche parte?

Sì, c'è! Date un'occhiata qui: https://reactiveui.net/api/

Come nota a margine, sentitevi liberi di navigare Reactive Programming section of the docs, che vi spiegherà alcuni dei terminologia di base e concetti in piedi dietro il quadro :)

+0

È RxUI implemenetation di asincronia più lento di asincrona/Attendere? Ho intenzione di usarlo su dispositivi Android, quindi questo potrebbe importare ... – tower120

+0

Beh, è ​​davvero difficile/impossibile rispondere a una domanda come quella (vedi http://ericlippert.com/2012/12/17/performance- rant/per sapere perché!). Inoltre, intendevi * l'implementazione Rx * dell'asincronicità? Perché RxUI non implementa nulla del genere. Inoltre, RxUI interagisce molto bene con Rx e TPL (noti anche come async). – pmbanka

+0

no, volevo dire piuttosto async/await (che si verifica sullo stesso thread) rispetto all'avvio del nuovo thread. In realtà non so come sia stato implementato in Rx. Ma so che async/await è il più veloce possibile ... E la sincronizzazione tra i thread può richiedere molto tempo alla CPU. – tower120

Problemi correlati