¿Es mejor usar el enlace de datos bidireccional con Rivets o Knockout.js o usar la arquitectura de flujo recomendada por React de Facebook?

Me he enfrentado a esta pregunta varias veces, utilizando el enlace de datos bidireccional con remaches y AngularJS, mientras que me acerqué a los patrones de flujo y reactivos con React.js, Flux y RxJS.

Lo que puedo decir es que encontré que las uniones bidireccionales tienen fallas. Al principio, especialmente con la poderosa “magia” que sucedía detrás de escena, me enamoré de ella. Mira, solo un simple `ng-model`, o un` rv-text`, ¡y todo cobra vida!

Sin embargo, al desarrollar herramientas cada vez más complejas, comienzas a ver su debilidad. Tener un enlace bidireccional significa que su flujo está cambiando de un lado a otro su controlador y su vista (supongo que un patrón MVC o MVVP, pero he encontrado que esta limitación aparece incluso con diferentes arquitecturas). Esto significa que ahora ha perdido el control sobre su modelo, sus datos, y necesita el doble de esfuerzo para mantenerlo significativo.

NgModel aplica un ejemplo a los elementos de formulario, pero he reconocido este problema incluso cuando uso remaches. Analice el valor de vista para actualizar el modelo, vuelva a formatearlo para mostrar el valor correcto, y pronto verá que, a excepción de elementos extremadamente simples, la unión bidireccional es simplemente dolorosa.

Por lo tanto, incluso si para estos elementos simples, el enlace bidireccional es un buen acceso directo, falla al manejar situaciones más complejas.

Reaccionar, y el patrón reactivo combinado con la arquitectura de flujo, en su lugar, le brinda un flujo más manejable, donde usted es responsable de realizar la vinculación efectiva. Esto puede parecer una complicación innecesaria a primera vista, sin embargo, su poder te facilitará la vida al lidiar con esas pequeñas diferencias entre la vista y la tienda. Solo piensa en una máquina de escribir. ¿Cuándo diría que se actualiza el modelo? ¿Cuándo es válido?

Además, el patrón reactivo nace especialmente para manejar el flujo de datos. Pero todo se puede representar como un flujo, es decir, los elementos de formulario son un flujo de eventos discretos que contienen el valor actualizado (puede comprender mejor este tema al leer el documento RxJS y el manifiesto reactivo). Me gustaría sugerirle incluso que lea sobre la programación funcional en JS, que es un gran tema en estos días, y puede ayudarlo a comprender de qué se trata todo esto.

Al final, la arquitectura de flujo es más confiable, con su flujo unidireccional y enlace de datos unidireccional, que el enlace bidireccional. De hecho, muchas herramientas argumentan en contra del enlace de datos bidireccional (Pros y contras de React vs. Componentes web (Polímero) de Facebook, mira la primera respuesta en la sección de enlace de datos).

TL; DR
Le sugiero que se sumerja en la arquitectura de flujo, explorando incluso los mundos de programación reactivos y funcionales. El enlace de datos bidireccional puede sonar como una panacea, pero al final he encontrado que es más un dolor automático que una herramienta efectiva.