os 10 maus hábitos dos desenvolvedores jsf
DESCRIPTION
Toda tecnologia tende a trazer consigo um novo paradigma de como desenvolver partes específicas de software, contudo, algumas novas práticas nem sempre são entendidas, e algumas vezes antigas práticas permanecem dentro do novo paradigma tornando-se assim maus hábitos, e com JSF não seria diferente. Aqui será apresentado 10 discussões sobre os maus hábitos mais comuns entre os desenvolvedores JSF, hábitos encontrados não somente entre iniciantes, mas também entre alguns desenvolvedores mais experientes, e por sua vez será apresentado soluções para cada um deles.TRANSCRIPT
Quem?
● Desenvolvedor● Coordenador do grupo JavaSF● Entusiasta Java e JSF● Sócio da Triadworks● Trabalha na IVIA
“Rafael Ponte”
JSF tenta encapsular toda a complexidade no desenvolvimento web com Java
A maioria dos desenvolvedores webs que já trabalharam ou trabalham com algum framework “action-like” acabam tendo grandes dificuldades ao desenvolverem com JSF.
Criando-se então maus hábitos..
10º Mau hábito
Usar <c:if/> ou <c:when/> para esconder componentes do usuário
<c:if test=”#{bean.admin}”><h:dataTable var=”row”><h:column>...
</h:column></h:dataTable>
</c:if>
Usar <c:if/> ou <c:when/> para esconder componentes do usuário
SOLUÇÃO?
Utilizar o atributo rendered dos
componentes para escondê-los do usuário
<c:if test=”#{bean.admin}”><h:dataTable
rendered=”#{bean.admin}”><h:column>...
</h:column></h:dataTable>
</c:if>
9º Mau hábito
Usar rendered="#{bean.alive}" em um componente que dispare eventos quando "bean" é de escopo de request
<h:commandButton value=”Salvar” action=”#{bean.salvar}” rendered=”#{bean.admin}” />
Usar rendered="#{bean.alive}" em um componente que dispare eventos quando "bean" é de escopo de request e "alive" é um atributo boolean de classe.
SOLUÇÃO?
Ampliar o escopo do managed bean para session ou se utilizar de algum framework ou componente de escopo conversacional
O uso indevido ou exarcebado da session é prejudicial para a aplicação.
✔ Myfaces Tomahawk [t:saveState]✔ Myfaces Orchestra✔ Myfaces Trinidad [pageFlowScope]✔ JBoss Seam✔ JBoss Richfaces [a4j:keepAlive]✔ etc
mais longo que request | mais curto que session
8º Mau hábito
Acham que a tag <redirect/> nas regras de navegação muda apenas a url da barra de endereço do browser
SOLUÇÃO?
Simplesmente entendam como funciona um
REDIRECT
7º Mau hábito
Alterar o estado de algum componente no lado cliente [browser] através de javascript e esperar que isso seja “entendido” pelo JSF
Alterar o estado de algum componente no lado cliente [browser] através de javascript e esperar que isso seja “entendido” pelo JSF
SOLUÇÃO?
Alterar o estado do componente no lado servidor via AJAX e
re-renderizar o componente
6º Mau hábito
Utilização demasiada de parâmetros de request e desenvolvimento voltado a "chave primária"
Utilização demasiada de parâmetros de request e desenvolvimento voltado a "chave primária"
SOLUÇÃO?
Pensar mais orientado a objetos e deixar com que os
componentes troquem entidades e não “chaves
primárias”
5º Mau hábito
Não implementam os métodos equals() e hashCode() das entidades da aplicação
Esquecem de implementar os métodos equals() e hashCode() das entidades da aplicação
SOLUÇÃO?
Apenas implementem os
métodos
4º Mau hábito
Implementam o próprio mecanismo de
SEGURANÇA
SOLUÇÃO?
Utilizem um framework especializado
3º Mau hábito
Paginação de registros na session
Uma das melhores maneiras de matar a escalabilidade da aplicação é a utilização indiscriminada da session
SOLUÇÃO?
Paginação sob demanda
2º Mau hábito
Utilizam os componentes AJAX
de maneira INEFICIENTE
SOLUÇÃO?
Regras de navegação orientada a páginas
estados
1º Mau hábito
1º -e o pior- Mau hábito
JSF LIFECYCLE
JSF LIFECYCLE
A maioria dos desenvolvedores NÃO
entendem
JSF LIFECYCLE
SOLUÇÃO?
http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html
Entendam o ciclo de vida
Concluindo..
Perguntas?