¿Qué tan fácil / difícil es desarrollar una aplicación nativa de su aplicación web (Ruby on Rails)?

Para responder a la pregunta de la cara, no es imposible, pero es difícil, y la magnitud de esa dificultad implica mucho más conocimiento de su aplicación que nosotros.

Para ir un poco más profundo, básicamente tienes dos estrategias que puedes probar. Ambos implican una cantidad de esfuerzo no trivial como base:

Yendo 100% nativo

Tienes una aplicación Rails increíble y quieres que esté disponible para las masas en un formato nativo. ¡Eso es genial! Para proporcionar la mejor experiencia posible, ha decidido centrar sus esfuerzos en convertir su aplicación en una experiencia 100% nativa sin dependencias externas de tiempo de ejecución. Aquí hay algunas cosas en las que deberá pensar si toma esta ruta:

  • ¿A qué plataformas quiero apuntar? Es decir, cuando hablamos de “nativo” aquí, ¿estamos hablando de plataformas móviles, o también estamos apuntando a las plataformas de escritorio?
  • ¿Necesito cambiar de idioma? Quizás no del todo, pero es mejor que lo hagas. Es decir, es probable que pueda reescribir la mayor parte de su lógica de negocios en ruby ​​compatible con mruby y empujar casi todo a esa lógica, pero es probable que aún deba producir la mayoría del código front-end en un idioma nativo adecuado. Dicho esto, mruby es bastante limitado por derecho propio, y tampoco es lo más productivo de la historia, por lo que hacer esto podría anular el propósito del esfuerzo de conversión nativo.
  • ¿Todos mis flujos de trabajo tienen sentido desde la perspectiva del usuario? Piense en sus flujos de trabajo en términos de descripciones simples en lenguaje natural. ¿Giran en torno a la frase “el usuario hace la cosa” o están más centrados en la idea “el sistema hace la cosa”? Si este último es el caso, es posible que sus flujos de trabajo sean bastante difíciles de asignar a la idea de una aplicación nativa completa.
  • ¿Mi aplicación depende de algún dato que no pueda almacenarse localmente? Es decir, ¿sus usuarios interactúan a través del sistema (compartiendo contenido generado por el usuario)? ¿Un usuario individual necesita poder acceder a su propio contenido en diferentes dispositivos de manera transparente? Si es así, es muy probable que no pueda * realmente * volverse 100% nativo y aún necesitará al menos una API ascendente mínima.
  • ¿Tengo suficientes recursos de tiempo / dinero para lograr esto? Hacer una reescritura completa de cualquier aplicación es generalmente un esfuerzo significativo, y aún más si necesita cambiar de idioma y considerar las idiosincrasias de sus plataformas de destino. Si el idioma / kit de herramientas que elige ya es compatible con todas sus plataformas de destino, puede aliviar al menos algo de ese dolor, pero todavía hay mucho dolor por encontrar. La realidad de la situación es que en realidad no valdría la pena las calorías (y el tiempo … y el dinero) que tendrá que quemar para que esto sea una realidad. Eso no quiere decir que no debas intentarlo, pero debes ser muy consciente de tus posibles puntos de pivote.

Interfaz nativa con una interfaz Rails

Tienes una aplicación Rails increíble y quieres que esté disponible para las masas en un formato nativo. ¡Eso es genial! Para no reinventar totalmente la rueda, por así decirlo, ha decidido que su aplicación nativa será una buena interfaz que se conecta a su aplicación Rails a través de una API. Aquí hay algunas cosas en las que deberá pensar si toma esta ruta:

  • ¿Mi aplicación realmente necesita un servicio ascendente? Es decir, ¿su aplicación implica que los usuarios vean datos compartidos / seleccionados / creados / verbos en pasado por otros usuarios? ¿El usuario necesita poder acceder a su propio contenido desde múltiples dispositivos sin problemas? De lo contrario, es posible que desee considerar hacer una conversión nativa completa en lugar de esta estrategia dividida.
  • ¿Qué pasa en el front-end y qué pasa en el back-end? Solo implemente cosas en el front-end que tengan sentido para un usuario. Es decir, el punto en un flujo de trabajo dado en el que “el usuario hace la cosa” pasa a “el sistema hace la cosa”, tiene una buena oportunidad para sacar la lógica empresarial y el esfuerzo del flujo de trabajo de los hombros del usuario y llevarlo a su API .
  • ¿Qué marco de front-end usarás? Elija un buen sistema front-end. Algunas personas ya han sugerido React Native, y por lo que entiendo, es una buena opción. Dicho esto, realmente me gusta cómo se está formando la API de Flutter, y aunque es bastante verde, podría valer la pena echarle un vistazo.
  • ¿Qué puedo hacer para garantizar una experiencia de usuario razonable? Esto es un poco abierto en sí mismo, pero seguiré y arrojaré el consejo que mejor se adapte a mi timonera. Haga que su API responda lo más rápido posible a las solicitudes. Esto podría significar arrojar solo una tonelada de hardware al problema, pero también podría significar configurar sus flujos de trabajo en torno a los procesos que puede ejecutar un trabajador en segundo plano como Sidekiq o Resque, y luego enviar los resultados al usuario cuando estén listos.
  • ¿Cuánto debe cambiar mi aplicación Rails? Si sigues el Rails Way (TM), diría que puede que tenga que cambiar mucho, pero probablemente sea un puñado de cambios relativamente indoloros. Si es posible, probablemente sería mejor rediseñar la versión web de su aplicación para que sea simplemente otra aplicación de rieles solo API con un ingenioso front-end si esa no es la forma en que está configurada. Si hace esto, es posible que pueda usar las mismas herramientas de front-end tanto para su aplicación web como para su compilación nativa.

Independientemente de la estrategia que elija, que tenga la mejor de las suertes.

Muy difícil, o muy fácil, o en algún lugar en el medio.

Depende.

Depende de ti. Dices aplicación “nativa”, que podría ser cualquier cosa realmente, Swift / UIKit o Android / Java, o Symbian / C ++. Su propia experiencia y nivel de habilidad en la plataforma de destino es el que hace el trato o se rompe aquí.

Eres un desconocido para mí, tal vez eres increíble, tal vez apestas. Su aplicación también es desconocida, tal vez sea realmente simple, o tal vez sea realmente complicada, no lo sé.

Lo que es fácil para ti puede ser difícil para mí, o viceversa.

Realmente se trata más de ti y de la aplicación. Básicamente, está preguntando si una persona desconocida puede portar una aplicación desconocida a una plataforma desconocida.

Acabo de comenzar a incursionar en aplicaciones nativas, sin embargo, recomiendo buscar en React Native. A menos que ya conozca Swift / Objective C (iOS) o Java (Android), tampoco veo el punto de invertir tiempo en aprender para el desarrollo de aplicaciones.

React Native tiene un rendimiento casi idéntico (mejor en algunos casos) y está tan cerca de la plataforma cruzada como lo hay en este momento.

Si sigue esa ruta, diría que es comparable a construir un sitio web promedio en su marco de elección. Si eres un experto en Javascript, es aún más fácil. Si ya conoces React, pondría la aplicación promedio en la categoría medio fácil.

Si te preocupa no ser 100% nativo, no lo sería. Constrúyalo con React Native y, si despega, puede darse el lujo de subcontratar a una buena empresa de desarrollo de aplicaciones y pagar los $ 10–30k para reescribirlo de forma nativa tanto para Android como para iOS.

More Interesting

¿Por qué el desarrollo web con Java es tan difícil y engorroso en comparación con Ruby on Rails o Django?

¿Por qué el navegador agrega o reemplaza el juego de caracteres de tipo Contenido con UTF-8 al realizar una solicitud XMLHttpRequest?

¿Cuáles son los consejos para un mejor desarrollo de aplicaciones web en 2017?

¿Cómo se puede usar la programación funcional en aplicaciones web, cuando las aplicaciones web tienen estado?

Excluyendo algoritmos de relevancia, ¿cómo se manejan típicamente los feeds de actividad personalizados a nivel de código / base de datos?

¿Cuál es el papel de un servicio web en una arquitectura de tres niveles?

¿Qué empresas populares usan Django para sus aplicaciones web?

¿Hay alguna forma de que una aplicación web realice directamente operaciones CRUD en la computadora en la que se ejecuta?

Cómo migrar a AngularJs 1.4

¿Por qué JavaScript y Python son tan populares, incluso para aplicaciones web a gran escala, a pesar de todo el odio por ser tipeado dinámicamente?

¿Qué herramientas debo usar para el desarrollo de aplicaciones web?

Entonces, estoy usando AJAX para hacer algo dentro de mi función, pero ¿cómo podría evitar que otros vean cuáles son las variables y dónde están publicando?

¿Un sitio web que sea muy útil con muchas características útiles, pero bastante feo / simple, superará a un sitio web que es hermoso pero tiene características limitadas y es (más o menos) difícil de usar?

Cómo predecir las tendencias tecnológicas futuras en el desarrollo de aplicaciones web

¿Es posible usar Python con su biblioteca OpenCV en una aplicación web hecha con Django?