Eu sou novo no StackExchange, mas achei que você poderia me ajudar.
Estamos criando um novo aplicativo Java Enterprise, substituindo uma solução JSP herdada. Devido a muitas mudanças, a interface do usuário e partes da lógica de negócios serão completamente repensadas e reimplementadas.
Nosso primeiro pensamento foi o JSF, pois é o padrão no Java EE. No começo, tive uma boa impressão. Mas agora estou tentando implementar um protótipo funcional e tenho algumas preocupações realmente sérias sobre o uso.
Primeiro, ele cria a pior e mais desorganizada mistura de pseudo-HTML / CSS / JS inválida que eu já vi. Ele viola todas as regras que aprendi no desenvolvimento da web. Além disso, ele se une, o que nunca deve ser tão fortemente associado: Layout, Design, Lógica e Comunicação com o servidor. Não vejo como eu seria capaz de estender essa saída confortavelmente, seja estilizando com CSS, adicionando candy de interface do usuário (como teclas de atalho configuráveis, widgets de arrastar e soltar) ou qualquer outra coisa.
Em segundo lugar, é muito complicado. Sua complexidade é notável. Se você me perguntar, é uma abstração pobre de tecnologias básicas da Web, aleijada e inútil no final. Quais benefícios eu tenho? Nenhuma, se você pensar. Centenas de componentes? Vejo dez mil trechos de HTML / CSS, dez mil trechos de JavaScript e milhares de plug-ins do jQuery. Resolve realmente muitos problemas - não teríamos se não usássemos o JSF. Ou o padrão do controlador frontal.
E, finalmente, acho que teremos que começar de novo daqui a 2 anos. Não vejo como posso implementar todo o nosso primeiro modelo de GUI (além disso, não temos nenhum JSF Expert em nossa equipe). Talvez pudéssemos hackear juntos de alguma maneira. E então haverá mais. Tenho certeza de que poderíamos hackear nosso hack. Mas em algum momento, estaremos presos. Devido a tudo acima, a camada de serviço está no controle do JSF. E teremos que começar de novo.
Minha sugestão seria implementar uma API REST, usando JAX-RS. Em seguida, crie um cliente HTML5 / Javascript com o MVC do lado do cliente. (ou algum sabor do MVC ..) A propósito; de qualquer maneira, precisaremos da API REST, pois também estamos desenvolvendo um front-end parcial para Android.
Duvido que o JSF seja a melhor solução hoje em dia. À medida que a Internet está evoluindo, realmente não vejo por que devemos usar esse 'rake'.
Agora, o que são prós / contras? Como posso enfatizar meu argumento de não usar o JSF? Quais são os pontos fortes do uso do JSF em relação à minha sugestão?