Estoy creando una nueva aplicación web comercial y quiero lograr:
- Utiliza las mejores tecnologías de sus respectivos reinos. Quiero un marco de backend confiable con ORM sólido. Y quiero el marco SPA (aplicación de una sola página) más avanzado con el uso de las funciones HTML y Javascript más actualizadas para la aplicación frontend
- Exponga entidades de back-end y servicios empresariales para el uso desde diferentes tipos de aplicaciones, por ejemplo, aplicaciones web, dispositivos móviles (Android) y posiblemente otros tipos (dispositivos inteligentes, etc.)
Entonces, para satisfacer ambos requisitos, me inclino a separar completamente mi aplicación en aplicaciones de back-end y frontend y organizar la comunicación entre ellas utilizando REST API (JSON). ¿Es este un enfoque sólido?
Dicha separación no es una solución de diseño obvia, porque muchas tecnologías de aplicaciones web tienen capas de vista integradas donde la aplicación del lado del servidor controla más o menos la generación de la vista y maneja parcialmente las respuestas de la vista (por ejemplo, SpringMVC con capa de vista, PHP Yii con vista capa, Java JSF / Facelets guarda completamente el estado de sus componentes en el servidor). Entonces, hay muchas tecnologías que proponen un acoplamiento más fuerte y prometen un tiempo de desarrollo más rápido y un recorrido de ruta más estándar. Entonces, debo ser cauteloso al comenzar a usar tecnologías de una manera que no se usa ampliamente.
Según tengo entendido, la interfaz de SPA completamente separada generalmente surge de la necesidad de usar API de terceros. ¿Pero es ese diseño de sonido de desacoplamiento cuando una compañía desarrolla tanto el backend como el frontend?
Mi elección de tecnologías actualmente es Java / Spring backend y Angular2 / Web Components / Polymer para frontend, si se me permite decir esto. Pero eso es irrelevante para esta pregunta, porque esta pregunta es sobre diseño general y no sobre la elección de tecnologías concretas.
So - I must be cautious when starting to use technologies in manner which is not widely used.
Sí, debe ser cauteloso si planea usar un martillo para lanzar seda. Quizás no sea la herramienta correcta.