Construí un sistema, comenzando con una aplicación de escritorio, hace 15 años cuando Java todavía estaba en su infancia y no estaba listo para usar en la construcción de este tipo de aplicaciones. Sabía que necesitaba tener un núcleo en C ++ y lo diseñé desde el principio para ser multiplataforma, incluido el uso de tipos de tamaño (por ejemplo, int32 en lugar de int o long), para que pudiera ejecutarse en Mac, Windows y UNIX (pre-Linux dias).
En el momento en que intenté buscar un buen entorno de interfaz de usuario multiplataforma, había algunos que incluían XVT. Realicé el entrenamiento para XVT y cuando comencé a crear una aplicación real, me di cuenta de que no iba a poder crear un aspecto limpio y nativo en la plataforma (comenzando con la Mac). Así que renuncié a esa idea y construí una interfaz de usuario nativa para Mac (PowerPlant) sobre el núcleo portátil.
Un par de años después, nos mudamos a Windows (UI en MFC). Fue más rápido construir una interfaz de usuario la segunda vez, mantuvimos una interfaz de usuario de Mac y Windows en paralelo por un corto tiempo y luego fuimos a Windows. El núcleo más tarde se trasladó a varios sabores de UNIX y Linux, para permitirnos ejecutar cálculos basados en el servidor. El núcleo funcionó bien, con algunos ajustes cuando lo preparamos para 64 bits.
Ahora he vuelto a usar una Mac y desearía poder volver a la Mac, pero el tamaño y la complejidad de la aplicación hacen que esta sea una elección difícil. Todavía tiene sentido que gran parte de esta aplicación sea una aplicación de escritorio, es como un entorno CAD. Pero en lugar de construir la interfaz de usuario nuevamente en un lenguaje C / C ++ específico de la plataforma (y continuar manteniendo una interfaz de usuario basada en MFC), estoy más inclinado a reescribir toda la pila en Java para que pueda ejecutarse en múltiples plataformas.
Todavía puede haber razones para ejecutar un núcleo que no sea Java, digamos C ++ como lo hicimos nosotros. Pero me gustaría ejecutar pruebas de rendimiento tempranas para ver si eso era realmente necesario. Y estaría mirando cuidadosamente mi interfaz de usuario para ver si podría construirla como una aplicación web, conectada al núcleo a través de servicios web, para poder tener una variedad de clientes: aplicaciones de escritorio, aplicaciones móviles, aplicaciones web, etc. Si necesitaba una pieza en C o C ++, ¿podría escribirse bajo una capa de Java? ¿O como un servicio web?
Otra consideración: ¿cuánto tiempo durará su aplicación? ¿Qué tan complejo será? Si tiene alguna idea sobre esto, considere la posible longevidad de cualquier biblioteca de UI que esté utilizando y su capacidad con el tiempo para que las personas ayuden a mantenerlas. Esto puede ser difícil de considerar ahora pero vale la pena pensarlo.
- Alex