He estado usando Rx en un nuevo proyecto de análisis financiero que recibe todos los datos de forma asincrónica. Me he sorprendido bastante de mi productividad personal y de lo mucho más comprensible que es mi código basado en eventos (a diferencia del modelo anterior de controladores de eventos con ifs anidados complejos y variables de estado aleatorias en todas partes). Alguien más tiene la oportunidad de jugar con él, y si es así, ¿cuáles son algunos de sus pensamientos?¿Ha resuelto RX Extensions el problema de la programación basada en eventos complejos?
Respuesta
Creo que las Extensiones reactivas simplifican drásticamente algunas partes de la programación compleja basada en eventos, pero el problema en su conjunto no está "resuelto".
Maneja muchas situaciones es una manera mucho más limpia, más elegante que antes. Sin embargo, no siempre ayuda (necesariamente) en el lado de generación de algunos patrones asincrónicos, donde la programación impulsada por eventos aún es difícil. Rx realmente se enfoca en manejar el lado de la suscripción del evento, pero no necesariamente en el lado de la ecuación productora.
Para algunas muestras distintas, y una idea de lo que se está considerando para futuras versiones de C# para manejar algunos de los modelos asíncronos más complejos, recomendaría ver Luca Bolognese's PDC Talk. Presentó algunas ideas en las que el equipo de lenguaje está trabajando para ayudar en el lado de autoría del desarrollo asíncrono, como una sintaxis tipo "iterador" para producir un IAsync<T>
directamente, con funciones de lenguaje para admitir la generación de los eventos.
Acabo de ver un webcast en extensiones RX, no toqué con él, y encontré la explicación demasiado complicada ... Pensé que los creadores eran astronautas de arquitectura.
Por ahora, simplemente no veo dónde está el problema con el controlador de eventos clásico ... Siempre he encontrado una solución elegante cuando tuve que usar la comunicación asincrónica entre un cliente y un servicio.
Sin embargo, estoy curioso con las experiencias de otras personas con este marco, dependiendo de las respuestas de este hilo, lo intentaré de nuevo.
No hay problema, solo RX lo hace más fácil. Por ejemplo, arrastre y suelte, para procesarlo debe pasar alrededor de un indicador en sus eventos, ya sea que haga clic en el botón del mouse o no. Con RX puede suscribirse al Mouse hacia abajo, hacia arriba, moverse, etc. y luego usar LINQ para procesar el evento sin necesidad de pasar un indicador en el evento, por ejemplo. – epitka
En http://channel9.msdn.com/posts/DC2010T0100-Keynote-Rx-curing-your-asynchronous-programming-blues, Bart de Smet explica de manera excelente cómo manejar las secuencias de eventos como un concepto de primera clase eleva el nivel de abstracción al hacerte pensar acerca de cómo implementar, por ejemplo. Throttle o DistinctUntilChanged cada vez de manera imperativa con muchos códigos repetitivos propensos a errores. Estos operadores encapsulan estos comportamientos de una manera reutilizable y composable. Así que mi opinión es que definitivamente hay espacio para una mayor evolución (ver por ejemplo las preocupaciones sobre los observables en frío), pero estas herramientas deberían estar en la caja de herramientas de cada desarrollador. Las construcciones de flujo de control habituales pueden cortarlo para la ejecución de un único subproceso, pero en el mundo altamente concurrente distribuido de hoy, creo que Observable (o mejor aún, EventStream/Propiedad) es una abstracción adecuada.
- 1. Programación basada en eventos vs programación secuencial
- 2. Demora y deduplicación con Reactive Extensions (Rx)
- 3. Creando una API de cliente REST usando Reactive Extensions (Rx)
- 4. ¿Cómo organizaría estas llamadas usando Reactive Extensions (Rx) en Silverlight?
- 5. Ventajas de .NET Rx sobre eventos clásicos?
- 6. ¿Cómo estrangular la secuencia de eventos con RX?
- 7. ¿Cómo se implementa la programación basada en eventos de Win32 bajo el capó?
- 8. Android java.net.UnknownHostException: Host no se ha resuelto
- 9. Rx para observar la propiedad cambió con eventos de acción
- 10. ¿Qué es la programación basada en datos?
- 11. Spring's Json no se ha resuelto con la respuesta adecuada
- 12. ejemplos del mundo real de Rx
- 13. ¿Cuándo ha utilizado la programación dinámica en el campo?
- 14. usar RX para desencadenar eventos en diferentes momentos?
- 15. ¿Cuál es la diferencia entre ejecutar y hacer en Rx?
- 16. Procesar eventos del Registro de eventos y reaccionar en un determinado patrón (Rx?)
- 17. interfaz de usuario basada en la programación funcional
- 18. ¿Qué biblioteca puedo usar para implementar programación basada en eventos en Python?
- 19. ¿Por qué el nombre "Comportamiento" en BehaviorSubject en RX?
- 20. table-layout: problema resuelto con anchos de columna
- 21. ¿Qué es exactamente "programación basada en interfaz"?
- 22. Estilo de interacción basada en eventos en REST
- 23. Algoritmo/problema de programación
- 24. Problema con el "encadenamiento" de eventos
- 25. Problema de programación de la máquina
- 26. Problema de programación de trabajos
- 27. Prueba unitaria basada en datos: ¿problema con la codificación CSV?
- 28. Extensiones reactivas (Rx) + MVVM =?
- 29. Cross Compiling Python Extensions
- 30. ha podido recuperar la programación de utilización de la GPU
Caña, excelente respuesta como siempre. También me hizo darme cuenta de que debería haber calibrado mi pregunta para reflejar las dificultades que enfrentan los desarrolladores como consumidores de eventos, que implican una gran cantidad de sincronización difícil, y si rx aborda esas preocupaciones. – Pierreten