Estou criando um novo aplicativo Web de negócios e quero alcançar:
- Use as melhores tecnologias de seus respectivos domínios. Quero uma estrutura de back-end confiável com ORM sólido. E eu quero a estrutura SPA mais avançada (aplicativo de página única) com o uso dos recursos mais atualizados de HTML e Javascript para o aplicativo front-end
- Expor entidades de back-end e serviços de negócios para o uso de diferentes tipos de aplicativos - por exemplo, aplicativos Web, dispositivos móveis (Android) e possivelmente outros tipos (dispositivos inteligentes, etc.)
Portanto, para atender a ambos os requisitos, estou inclinado a separar completamente meu aplicativo em aplicativos de back-end e front-end e a organizar a comunicação entre eles usando a API REST (JSON). Esta abordagem é sólida?
Essa separação não é uma solução de design óbvia, porque muitas tecnologias de aplicativos da web possuem camadas de visualização integradas, nas quais o aplicativo do servidor controla mais ou menos a geração da visualização e manipula parcialmente as respostas da visualização (por exemplo, SpringMVC com camada de visualização, PHP Yii com visualização camada, o Java JSF / Facelets salva completamente o estado de seus componentes no servidor). Portanto - existem muitas tecnologias que propõem um acoplamento mais forte e prometem um tempo de desenvolvimento mais rápido e uma jornada mais padrão. Então - devo ser cauteloso ao começar a usar tecnologias de uma maneira que não é amplamente usada.
Pelo que entendi, o front-end do SPA completamente separado geralmente surge da necessidade de usar a API de terceiros. Mas é esse design de som dissociado quando o back-end e o front-end são desenvolvidos por uma empresa?
Atualmente, minha escolha de tecnologias é Java / Spring back-end e Angular2 / Web Components / Polymer para front-end - se eu puder dizer isso. Mas isso é irrelevante para esta questão, porque esta questão é sobre design geral e não sobre a escolha de tecnologias concretas?
So - I must be cautious when starting to use technologies in manner which is not widely used.
Sim, você deve ser cauteloso se planeja usar um martelo para lançar seda. Talvez não seja a ferramenta certa.