segunda-feira, 6 de outubro de 2008

JSF versus Struts

O objetivo de ambos os frameworks é facilitar a implementação da lógica da parte de visão e implementar a divisão da lógica de visão e da lógica de negócios. Para comparar as duas tecnologias vamos comparar alguns quesitos importantes.

Um fator muito importante para arquitetos de software é o risco que se tem em um projeto. E podemos dizer que com relação ao numero de desenvolvedores Struts ganha e muito de JSF. Para tomar a decisão entre usar ou não esta tecnologia é bom conhecer a equipe de desenvolvimento do projeto em questão.

Outro fator importante é a maturidade do framework. Temos hoje vários sistemas em produção utilizando a tecnologia Struts enquanto temos uma quantidade bem menor de sistemas em produção utilizando JSF. Apesar de JSF ter evoluído bastante nestes últimos anos, temos que Struts ainda possui uma maturidade maior.

Com relação à evolução do framework JSF ganha de lavada, por se tratar de uma especificação. O Struts original parou na versão 1.3.9 e mudou totalmente de conceito na versão 2.0 em que foi substituído pelo framework WebWork apenas por questões de marketing.

Outro ponto que JSF ganha de lavada é com relação à maior flexibilidade do controle e o tratamento de eventos. Utilizando JSF não é necessária a extensão das classes Action e nem a utilização de formulários o que simplifica o desenvolvimento por tirar camadas desnecessárias.
Com relação à navegação tanto Struts quanto JSF são bem flexíveis, mas JSF supera devido ao fato das regras de navegação estar desacopladas das ações. Além disto, com JSF é mais fácil ter uma página com várias regras de navegação uma vez que não é necessária a utilização de ifs e elses.

Com relação à integração e extensibilidade mais pontos para JSF. Struts é neutro neste ponto, possuindo integração com apenas poucos frameworks, enquanto JSF possui integração com vários frameworks.

Com relação ao desenvolvimento de páginas temos mais ferramentas RAD para o desenvolvimento JSF, uma vez que o framework foi feito se pensando neste ponto. Outro fator a ser considerado é o apoio de grandes empresas. JSF tem tido o apoio de grandes empresas como IBM, Oracle e Red Hat o que torna a adoção ao framework maior, uma vez que dá o aval que o framework irá crescer e evoluir.

Uma desvantagem de JSF é o fato de ser menos transparente do que Struts. Com JSF existem muito mais coisas acontecendo por trás das cenas do que aplicações feitas em Struts, o que faz com que JSF seja mais difícil de entender e mais difícil de verificar a performance e otimizar.

E agora? O que vamos usar para decidir entre as duas tecnologias? Se vamos começar um projeto hoje, devemos considerar vários fatores. Se você não tem muito tempo para realizar a avaliação de frameworks e não tem uma equipe qualificada para a utilização de JSF decida por utilizar o framework Struts. Mas por uma visão estratégica, por ser uma tecnologia que irá evoluir, ter apoio das grandes empresas de mercado e por existirem ferramentas de desenvolvimento rápido eu encorajo a utilização de JSF.

11 comentários:

bricio's life disse...

Olá Samuel Martins,
Hj. felizmente há vários Frameworks WEB - uns 100 em média -, mais o que mais me assusta é o comodismo das equipes em usar o Struts 1.1.x pq. "ele roda em qualquer lugar" ora bolas ele é um "Action Framework" que roda sobre um "Servlet container".Acho que ainda temos muitos desenvolvedores(=programadores vaca de presépio ) que somente recortam e colam código, é preciso acabar com isso urgente.

Unknown disse...
Este comentário foi removido pelo autor.
Unknown disse...

Samuel,

O JSF não se propõe ao mesmo papel do Struts. O JSF é um framework orientado a componentes e o Struts é um framework MVC.
Apesar do Struts possuir tags da camada de visão, basicamente sua função é a implementação da camada de controle, do modelo MVC.
Em minha opinião o Struts não é um framework maduro e sim um framework ultrapassado. Basta dá uma olhada na Internet existem vários frameworks MVC com maiores facilidades que o Struts (eu por exemplo uso o VRaptor que tem uma curva de aprendizagem mínima para que já utilizou Struts).
Quanto ao JSF estamos iniciando seu uso em um projeto não prioritário em minha equipe, os resultados são animadores.

Ob.: Um conselho: não pensem em usar o JSF sem uma ferramenta de apoio. Eu aconselho a IDE NetBeans - para esse funcionalidade o Eclipse ainda está alguns anos luz.

O JSF pode ser comparado a outros frameworks orientados a componentes. Tentem fazer a comparação com o Apache Wicket.

Rodrigo disse...

Samuel, antes de utilizar/recomendar qualquer framework acho que a melhor maneira de avaliá-lo é ressaltando seus pontos fracos e o esforço necessário para contornar estes problemas. Com relação ao JSF há muita complexidade para customizações ou utilizações mais específicas, coisa que a maioria dos frameworks WEB/MVC facilita ao invés de complicar. O JSF me parece uma tecnologia sem propósito bem definido, que a Sun "criou" pois estava perdendo mercado para o ASP.NET. Não defendo (nem utilizo) o Struts pois é um framework ultrapassado, mas compará-lo ao modelo proposto pelo JSF não faz muito sentido. Atualmente modelos WEB/MVC mais maduros como Spring, VRaptor, Stripes ou até mesmo Rails ainda são a melhor alternativa, na minha opnião.

Unknown disse...

Rodrigo, não concordo que existe muita complexidade para customizar os componentes JSF, o que é necessário (estou afirmando isso novamente) é utilizar uma IDE que dê suporte a JSF.
Quanto oa proposito do JSF, para mim está muito claro, criar aplicações web com a mesmas facilidade de aplicações swing. Já observou que para programar web é necessário entender como funciona a arquitetura web (request, context, session, escopos de parametros/atributos...) com JSF você programa da mesma/quase forma que uma aplicação swing.

Aprenda como funciona o modelo orientado a componentes.

Um detalhe, JSF não foi criado para trabalhar na mão, foi criado para trabalhar utilizando um IDE. Seu principal atrativo é a produtividade, porém, como tudo que é criado em Java, só existe produtividade se você sabe como as coisa funcionam (resumindo: estude, estude e estude).

Quanto ao artigo de Samuel achei fantástico, sem ele, não estariamos discutindo e aprendendo cada vez mais.

Samuel Martins Delfim disse...

Obrigado pelos comentários pessoal,

Começamos a implementar um novo sistema agora e este foi um trabalho que tive. Pesquisar sobre as tecnologias que seriam utilizadas no sistema.

Sobre Struts ser mais maduro me referi ao número de sistemas que se encontram em produção e estão rodando, mas olhando pelo seu ponto de vista realmente acho um framework ultrapassado. Com relação a ferramentas estamos olhando a respeito do Jboss Tools para o eclipse que parece bem legal também. A equipe tem mais costume de usar o ecliplse e estou primeiro estudando plugins para ele.

Com relação ao propósito, por mim acho que não é algo que falta para JSF. Como parte da especificação JEE 5 acredito que este foi muito bem pensado e veio a cobrir várias das falhas que existiam no desenvolvimento de aplicações Web Java. A concorrência com .Net provavelmente ajudou, mas para mim isto é ótimo, pois gerou grandes evoluções da linguagem e dos frameworks. (Para ambos os lados)

Novamente obrigado pelos comentários e contribuições pessoal.

Camilo lopes disse...

olá Samuel,

Primeiramente parabens pelo blog. Achei um dia desses e realmente está de parabens. E uma das pesquisas era essa JSF X Struts. Bem eu acho que a Sun lancou o JSF pensando tb no uso da IDE deles o NetBeans se formos analisa o mkt e a evolucao dessa ide nos ultimos 2 anos tem acontecido de uma forma bem rapida e realmente deixando o ambiente produtivo em relacao ao eclipse para trabalhar com JSF por exemplo NB eh outro mundo, ate com Struts a IDE está bem melhor. Entao acredito que esse foi outro objetivo da Sun com JSF, que ja tive a oportunidade de usar em pequenos projetos, mas ainda fico sempre na duvida de ir com Struts ou JSF. Mas seu post e o comentario da galera ajudou.
abraco,

Anônimo disse...

Realmente o site é dez! Sou novato e os posts acima me ajudaram muito!

abraço galera, André AS (andredecotia).

Alex disse...

Ambos são bons, mas o JSF parece produzir menos código, agilizando o processo de produção.

LUMINÁRIAS SOLARES GoldenSun disse...

Desde que comecei a mexer com java ,isso era no servlet e jsp , depois me jogaram em projetos com jsf , nunca usei struts. E concordo a produtividade com jsf é tremenda , extremamente fácil a curva de aprendisagem. Porem o que me aflinge, é a performance das aplicaçoes em JSF , me pareceram pesadas , lentas , o que voceis acham ?

Adolfo Eloy disse...

Parabéns pelo post.
O último comentário faz uma citação à perda de performance ao usar JSF. Na minha opinião, o fato de termos o processamento de todo o ciclo de vida do JSF onde ocorrem validações, conversões e etc pode implicar na latência de uma requisição, porém não considero que seja algo significativo para a maioria das aplicações. Para mim, hoje o que menos me agrada em aplicações JSF, é o HTML gerado. Basta olhar o resultado e analisar a quantidade de javascript gerado no meio da página (javascript obstrusivo) e a bagunça no HTML. Gostaria de saber o quanto isso pode atrapalhar quando quero que minha aplicação seja encontrada pelos maiores sites de busca.