La tecnología móvil que Couchbase anuncia hoy marca el inicio de una transición para los desarrolladores de aplicaciones móviles: alejarse de la pila LAMP centrada en la web y acercarse a una pila móvil integrada. Con JSON Anywhere, los desarrolladores pueden concentrarse en crear valor para los usuarios, en lugar de escribir montones de código dedicado a enviar datos entre los dispositivos y la nube. Nuestros ingenieros se han centrado en la experiencia del desarrollador desde el principio de este proyecto, por lo que hay un montón de detalles que deberían hacerte feliz, desde compatibilidad con el inicio de sesión social a vinculación de datos en vivo para UITableView de iOSpero los dos aspectos que más repercutirán en la productividad son la flexibilidad de los esquemas JSON y la perfecta sincronización de JSON con otros dispositivos y la base de datos backend.
Como a muchos desarrolladores, me atrajo primero NoSQL por la flexibilidad de JSON como formato de base de datos. Como se pueden añadir nuevos campos a los documentos en cualquier momento, los desarrolladores de aplicaciones nunca tienen que esperar a una migración de la base de datos. Ha habido abundancia dijo acerca de uso de JSON con prácticas de desarrollo ágilasí que no lo repetiré aquí. Lo importante de Couchbase Lite es que lleva la potencia y flexibilidad de JSON al móvil.
JSON es especialmente valioso para las aplicaciones móviles, porque a menudo tienes que tratar con una mezcla de usuarios, algunos ejecutando versiones antiguas de tu software y otros con la última actualización. Con JSON, la mayoría del código ignorará los campos "extra" que no utilice. A medida que los usuarios se actualizan a una versión más reciente de su aplicación, pueden seguir interactuando con los que todavía están ejecutando una versión anterior. Los campos utilizados por la nueva versión de la aplicación serán simplemente ignorados por la versión antigua. Esto permite a los usuarios actualizar a su propio ritmo, en lugar de obligarles a dejar lo que están haciendo y actualizar de inmediato. Aunque es posible realizar actualizaciones continuas con una arquitectura tradicional, esto requeriría trabajo adicional por parte del equipo de desarrollo del servidor, en lugar de ser una consecuencia natural del uso de una base de datos flexible.
Los desarrolladores de aplicaciones están siempre a la búsqueda de herramientas y técnicas que puedan aumentar su productividad o permitirles construir una mejor experiencia de usuario con menos código. Ya hemos visto estas transiciones en la arquitectura web: de los scripts CGI ad hoc a los servidores de aplicaciones gestionados, y de Java a lenguajes como Ruby o JavaScript que se centran en la felicidad del desarrollador. Una transición de este tipo sólo tendrá éxito si conduce a grandes saltos en la productividad de los desarrolladores, que es exactamente lo que prometen estas nuevas plataformas. Cuando se anunció por primera vez Ruby on Rails, se produjo una avalancha de desarrolladores con la esperanza de sacar partido de un oportunidad de arbitraje de productividad lo que les permite cobrar menos a los clientes por el mismo trabajo y ganar más dinero haciéndolo que un equipo Java comparable.
La sincronización sin fisuras ofrece aún más ganancias de productividad que el paso de relacional a JSON. Con una sincronización tan sencilla que es más fácil sincronizar que crear un backend de servicios web tradicional para tu aplicación móvil, veremos muchas más aplicaciones que darán a sus usuarios acceso a sus datos a través de dispositivos y sistemas operativos. Sync tiene fama de ser muy difícil de implementar. No hay que buscar mucho para encontrar historias de empresas que dedicaron importantes recursos a crear la sincronización, y incluso después de años de desarrollo, siguen encontrando fallos y casos extremos. No sería justo comparar una aplicación que usa Couchbase Lite para sincronizarse con Couchbase Server con Couchbase Sync Gateway, con una aplicación que construye su propia instalación de sincronización personalizada. Cualquiera que construya la sincronización desde cero se está embarcando en un proceso de varios años, y llegar a "hola mundo" con Couchbase sólo debería llevar unos minutos.
Aunque la sincronización se está convirtiendo rápidamente en la nueva normalidad, la mayoría de las aplicaciones móviles colaborativas de hoy en día dependen de estar conectadas a un servidor en la nube. Para ser justos, compararemos el backend de una de nuestras aplicaciones de ejemplo con la misma aplicación utilizando un backend Ruby on Rails. Nuestro objetivo es construir una tecnología que suponga un salto en productividad para los desarrolladores, como lo fue Rails en comparación con sus predecesores. Veamos las diferencias entre una aplicación JSON Anywhere y una aplicación móvil tradicional con servicios web.
El código fuente del backend de nuestro ejemplo de aplicación Todo Lite se encuentra en una única función JavaScript de 33 líneas. Su principal responsabilidad es garantizar que a cada lista de tareas sólo puedan acceder las personas que el propietario de la lista haya designado como miembros de la misma. También es responsable de asegurarse de que cada tarea se enruta a los dispositivos que tienen acceso a la lista asociada. También hay algunas líneas de código dedicadas a distribuir perfiles de usuario para potenciar la interfaz de usuario compartida. Para profundizar en una aplicación similar, puedes seguir un recorrido por el modelo de datos de nuestra aplicación de chat de ejemplo.
En una aplicación Rails tradicional de tres niveles, tendríamos modelos correspondientes a usuarios, listas y tareas. Puede que también tengas un modelo de "membresía" que capture las restricciones de acceso. Pero lo que más caracteriza a una aplicación de estilo Rails es que cada vez que un usuario crea una tarea, activa una casilla de verificación o añade un nuevo miembro a una lista de tareas, la aplicación móvil realiza una petición HTTP al servidor. El servidor cargará entonces los objetos modelo apropiados desde la base de datos, validará los cambios y los guardará de nuevo en la base de datos. A continuación, tendrá que notificar a los demás dispositivos móviles que su representación del objeto no está actualizada para que puedan actualizarla. (Ten en cuenta que ni siquiera hemos empezado a tener en cuenta el caso de que los dispositivos móviles modifiquen los datos mientras están desconectados...).
Hagamos un cálculo aproximado de la cantidad de código que tendríamos que escribir para crear una aplicación Rails de este tipo. Voy a omitir el código de inicio de sesión/usuario, ya que normalmente no se escribe como código personalizado para la aplicación.
- Modelos: task, list, membership, 10 líneas cada uno
- Controlador: listas, tareas, membresías, cada una con GET, PUT y DELETE, 40 líneas cada una.
- No se necesitan plantillas porque estamos devolviendo JSON.
- Otras 50 líneas de código para manejar el envío de eventos de refresco a cualquier cliente a la escucha.
El total es de unas 200 líneas de código Ruby on Rails para crear una aplicación básica de listas de tareas. Esto es casi un orden de magnitud más de código que la función Couchbase Sync Gateway utilizada por Todo Lite. ¿Qué prefieres escribir y mantener? Con la pila de Couchbase, no sólo obtienes sincronización offline, sino que tu backend requiere mucho menos código, liberándote para pasar tu tiempo creando valor donde importa, en las manos de tus usuarios.