Es completamente posible si su aplicación es simple. Si su aplicación es compleja, es posible en su mayor parte , pero cuanto más sofisticada se vuelva su aplicación, más probable es que necesite un código específico de la plataforma para brindar a sus usuarios la mejor experiencia posible en cada plataforma.
La ventaja es, por supuesto, que su base de código general será más pequeña, ya que gran parte se reutilizará. Esto puede muy bien superar todos los inconvenientes a continuación. O puede que no, eso dependerá de lo que haga su aplicación y de cuánto valore las cosas que pierde al adoptar este enfoque.
Un inconveniente es que estará programando contra una abstracción de la plataforma real. Las abstracciones siempre se rompen si las empujas lo suficiente. Habrá capacidades de cada plataforma que no podrá aprovechar al máximo, porque la abstracción no las incluye.
- ¿Los desarrolladores de software copian el código de sus colegas?
- ¿Qué importancia tienen los proyectos paralelos y las contribuciones de código abierto en el proceso de contratación de ingenieros de software?
- ¿Cómo hago para que los programadores se interesen en trabajar en un proyecto conmigo?
- ¿Cuánto puede ganar un ingeniero de software promedio trabajando en una compañía promedio en los Estados Unidos? ¿Cuánto dinero se destina al pago de impuestos del salario?
- ¿Es seguro seguir una carrera en desarrollo de software o ciencia de datos en Australia? (Seguro en términos de obtención de relaciones públicas, demanda / crecimiento del empleo, salario, etc.)
Por ejemplo, si diseñas toda tu interfaz de usuario alrededor de dispositivos con capacidad táctil, no tendrás un gesto de “desplazamiento” de la interfaz de usuario. O bien, si utiliza el cursor estacionario como un gesto de la interfaz de usuario, los usuarios de dispositivos con capacidad táctil lo encontrarán muy frustrante. Para un ejemplo específico, observe cómo al pasar el cursor sobre el elemento “Inicio” en el banner superior de Quora, aparece una ventana emergente de notificación. Ahora intenta duplicar eso en un dispositivo con capacidad táctil … no puedes desplazarte con el dedo. Por supuesto, esto se puede resolver mediante un código específico de la plataforma.
Una forma de obtener escritura una vez que se ejecuta en todas partes es hacer toda su lógica del lado del cliente en Javascript, y hacer que el Javascript haga solicitudes XMLHTTP al servidor para obtener los datos necesarios en tiempo de ejecución, por lo que solo una página la carga tiene lugar alguna vez. Su “aplicación” nativa puede ser poco más que un navegador en modo de pantalla completa.
Puede desarrollar una aplicación muy sofisticada de esta manera: vea Outlook Web Access en Exchange 2013, por ejemplo (me gusta este ejemplo porque trabajé en él). Un inconveniente de este enfoque es que no obtienes la velocidad del código nativo en dispositivos que admiten código nativo. Otro inconveniente es que los depuradores de Javascript no son tan sofisticados como los buenos depuradores de código nativo. Otro inconveniente es que puede terminar recreando muchos elementos básicos de la interfaz de usuario que son mucho más fáciles de implementar (o que son gratuitos) con desarrollo nativo (por ejemplo, cuadros de lista verticales donde cada elemento de la lista contiene múltiples líneas de texto formateado) . Otro inconveniente es que puede terminar con MUCHOS javascript, lo que lleva tiempo descargar cuando se inicia la aplicación. Otro inconveniente es que HTML es pésimo como lenguaje de especificación de GUI; se puede hacer, pero es una clavija cuadrada en un agujero redondo.
Otro inconveniente es que es probable que cada versión de su aplicación tenga un aspecto muy similar en todas las plataformas. Se podría decir que esto es una ventaja, sin embargo, si la mayoría de sus clientes individuales solo usan una sola plataforma, es posible que no estén contentos de que su aplicación no tenga el mismo aspecto que una aplicación nativa.
Dicho todo esto, no es necesariamente un mal enfoque. Como mencioné, trabajo en un producto que utiliza este enfoque.
Pero tiene inconvenientes. Se podría argumentar que los usuarios obtendrían mejores resultados si cada plataforma tuviera una aplicación nativa, pero por otro lado, tomaría más tiempo (o más personas / más dinero) desarrollar múltiples aplicaciones nativas.