Frage

Die neue IObservable/IObserver-frameworks in das System.Reaktive Bibliothek kommen .NET 4.0 sind sehr spannend (siehe diese und diese link).

Es ist möglicherweise zu früh, um zu spekulieren, aber wird es dort auch ein (aus Mangel an einem besseren Begriff), das IQueryable-wie Rahmen-gebaut für diese neuen Schnittstellen?

Ein Anwendungsfall wäre, unterstützen im pre-processing Ereignisse an der Quelle, anstatt in der Kette von der Entgegennahme von anrufen.Zum Beispiel, wenn Sie haben eine sehr "gesprächig" - Veranstaltung-Schnittstelle, mit der Subscribe().Where(...) erhalten Sie alle Ereignisse über die pipeline und der client funktioniert die Filterung.

Was ich mich Frage ist, ob es so etwas wie IQueryableObservable, wobei diese LINQ-Methoden 'compiled' in eine 'smart' Subscribe Umsetzung in eine Quelle.Ich kann mir vorstellen, bestimmte Netzwerk-server-Architekturen, bei denen ein solcher Rahmen.Oder wie wäre es mit einem add-on zu SQL Server (oder einer beliebigen RDBMS für diese Angelegenheit), die es erlauben würde .NET-code zu erhalten neuer Daten-Meldungen (Trigger in code) und würde diese Benachrichtigungen gefiltert server-Seite.

War es hilfreich?

Lösung

Nun, du hast es in der neuesten Version von Rx, in Form einer Schnittstelle namens IQbservable (als IQueryableObservable ausgesprochen). Bleiben Sie für ein Channel 9 Video über das Thema abgestimmt, kommt Anfang nächste Woche.

um diese Funktion nutzen ein wenig situieren, sollte man erkennen, gibt es konzeptionell drei orthogonalen Achsen auf die Rx / Ix Puzzle:

  • Was das Datenmodell wird Sie Targeting. Hier finden wir-Pull-basierte gegen push-basierten Modelle. Ihre Beziehung basiert auf Dualität . Transformationen bestehen zwischen diesen Welten (z.B. ToEnumerable).
  • Wo Sie Operationen ausführen, die Ihre Anfragen fahren (sensu lato). Einige Betreiber müssen Gleichzeitigkeit. Dies ist, wo Scheduling und die IScheduler Schnittstelle kommen in. Die Betreiber existieren zwischen Gleichzeitigkeit Domänen hüpfen (z ObserveOn).
  • Wie ein Abfrageausdruck ausführen muss. Entweder wörtlich (IL) oder übersetzbar (expression Bäume). Ihre Beziehung basiert auf Homoikonizität . Umwandlungen existieren zwischen beiden Darstellungen (z.B. AsQueryable).

Alle IQbservable Schnittstelle (die die dualen zu IQueryable und die Ausdrucksbaumdarstellung einer IObservable Abfrage) ermöglichen, ist der letzte Punkt. Manchmal verwirren Menschen den Akt der Abfrage Übersetzung (das „Wie“ laufen) mit Remote Aspekten ( „where“ zu laufen). Während in der Regel übersetzen Sie tun Abfragen in eine Zielsprache (wie WQL, Powershell, DSQLs für Cloud-Benachrichtigungsdienste, etc.) und Remote sie in einigen Zielsystem, beide Anliegen entkoppelt werden. Zum Beispiel könnten Sie die Ausdruck Baumdarstellung verwenden zu tun local Abfrageoptimierung.

Im Hinblick auf mögliche Sicherheitsbedenken, das ist nicht anders als die IQueryable Fähigkeiten. Typischerweise man wird nur Fern die Ausdruckssprache und keine „wirklich Nebenbewirke“ Operatoren (was immer das bedeutet für andere Sprachen als fundamentalistisch funktionelle ist). Insbesondere Abonnieren die und Run-Operationen bleiben lokal und nehmen Sie aus dem abfragbaren Monade (also Übersetzung Triggern, wie GetEnumerator tut in der Welt der IQueryable). Wie würden Sie Fern der Akt der zeichn ist etwas, was ich für die Phantasie des Lesers überlassen werden.

Starten Sie mit dem neuesten Bits heute und lassen Sie uns wissen, was Sie denken. Auch bleibt für das kommende Channel 9 Video zu dieser neuen Funktion, einschließlich einer Diskussion über einige seine Design-Philosophie abgestimmt.

Andere Tipps

Während das klingt wie eine interessante Möglichkeit, ich würde haben einige Bedenken über die Umsetzung dieser.

1) ebenso können Sie nicht serialisieren, die nicht-triviale lambda-Ausdrücke verwendet, um IQueryable, Serialisierung diese für Rx wäre ähnlich schwierig.Würden Sie wahrscheinlich wollen, um in der Lage sein, serialisiert, multi-line und statement lambdas als Teil dieses Rahmens.Zu tun, würden Sie wahrscheinlich benötigen, um etwas umzusetzen, wie Erik Meijer ' s pet Projekte - Dryade und Volta.

2) Selbst wenn man das könnte serialisieren Sie diese lambda-Ausdrücke, würde ich besorgt sein über die Möglichkeit, beliebigen code auf dem server vom client gesendet.Dies könnte leicht ein Sicherheitsrisiko betreffen weit mehr als die cross-site-scripting.Ich bezweifle, dass der potenzielle Vorteil, dass der client zum senden von Ausdrücken, um den server auszuführen überwiegt die Sicherheitslücke Auswirkungen.

8 (jetzt 10) Jahre in die Zukunft: Ich stolperte über Qactive (ehemalige Rxx), ein Rx.Net basierte abfragbaren reaktive tCP-Server-Provider Es ist die Antwort auf die „Frage in Frage“

Server

Observable
    .Interval(TimeSpan.FromSeconds(1))
    .ServeQbservableTcp(new IPEndPoint(IPAddress.Loopback, 3205));

Client

var datasourceAddress = new IPEndPoint(IPAddress.Loopback, 3205);
var datasource = new TcpQbservableClient<long>(datasourceAddress);

(
     from value in datasource.Query()
     //The code below is actually executed on the server
     where value <= 5 || value >= 8
     select value
)
.Subscribe(Console.WriteLine);

Was ist Geist über diese Blasen ist, dass die Kunden sagen können, was und wie häufig sie die Daten wollen sie erhalten und der Server kann noch begrenzen und die Kontrolle, wann, wie häufig und wie viele Daten er zurückkehrt.

Für weitere Informationen über diese https://github.com/RxDave/Qactive

Ein weiterer blog.sample

https://sachabarbs.wordpress.com/ 2016/12 / 23 / rx-over-the-wire /

Ein Problem, das ich lieben würde, mit dem reaktiven Rahmen gelöst, um zu sehen, ob es möglich ist, wird ermöglicht, Emission und subcription Benachrichtigungen für die zwischengespeicherten Daten von Web-Service und anderen Pull-Diensten nur zu ändern.

Es scheint, basiert auf einer neuen Channel9 Interview , dass es zu LINQ-Unterstützung für IObserver / IObservable im BCL von .NET 4.

Allerdings wird es im Wesentlichen seiner LINQ-to-Objects-Stil-Abfragen, so in diesem Stadium ist es nicht wie ein ‚Smart subscribe‘ aussieht wie Sie es nennen. Das ist so weit wie die grundlegenden Implementierungen in .NET 4. (Von meinem Verständnis aus der obigen Interview) gehen

Having said that , die Reactive Rahmen (Rx) detailliertere Implementierungen von IObserver / IObservable haben kann, oder Sie können Ihren eigenen Tod im Expression<Func...> für die Subscribe Paramater schreiben und dann die Verwendung von Expression Baum des Func auf eine intelligentere Art zu zeichnen, die den Ereigniskanal zu Ihnen passt zu abonniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top