Os 10 Maus Hábitos dos Desenvolvedores JSF

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites

    Os 10 Maus Hábitos dos Desenvolvedores JSF - Presentation Transcript

    1. Os 10 (dez) maus hábitos dos desenvolvedores JSF Rafael Ponte Tarso Bessa http://www.rponte.com.br http://www.tarsobessa.com rponte@gmail.com tarso.bessa@gmail.com
    2. Quem? “Rafael Ponte” “Tarso Bessa” ● Desenvolvedor ● Arquiteto Java ● Coordenador do ● Entusiasta Java e grupo JavaSF JSF ● Entusiasta Java e ● Membro do Cejug JSF ● Trabalha na ● Consultor da Dataprev TriadWorks
    3. JSF tenta encapsular toda a complexidade no desenvolvimento web com Java
    4. A maioria dos desenvolvedores web que já trabalharam ou trabalham com algum framework “action-like” acabam tendo grandes dificuldades ao desenvolverem com JSF.
    5. Criando-se então maus hábitos..
    6. 10º Mau hábito
    7. Usar <c:if/> ou <c:when/> para esconder componentes do usuário
    8. <c:if test=”#{bean.admin}”> <h:dataTable var=”row”> <h:column> ... </h:column> </h:dataTable> </c:if>
    9. Usar <c:if/> ou <c:when/> SOLUÇÃO? para esconder componentes do usuário
    10. Utilizar o atributo rendered dos componentes para escondê-los do usuário
    11. <c:if test=”#{bean.admin}”> <h:dataTable rendered=”#{bean.admin}”> <h:column> ... </h:column> </h:dataTable> </c:if>
    12. 9º Mau hábito
    13. Usar “stateless” EL no atributo rendered em um componente que dispare eventos
    14. <h:commandButton value=”Salvar” action=”#{bean.salvar}” rendered=”#{bean.admin}” />
    15. SOLUÇÃO?
    16. Garantir a avaliação consistente da EL entre requisições.
    17. session?
    18. O uso indevido ou exarcebado da session é prejudicial para a aplicação.
    19. mais longo que request | mais curto que session ✔ Myfaces Tomahawk [t:saveState] ✔ Myfaces Orchestra ✔ Myfaces Trinidad [pageFlowScope] ✔ JBoss Seam ✔ JBoss Richfaces [a4j:keepAlive] ✔ etc
    20. 8º Mau hábito
    21. Usar <redirect/> nas regras de navegação para forçar a mudança da URL
    22. SOLUÇÃO?
    23. entendam Simplesmente como funciona um REDIRECT
    24. 7º Mau hábito
    25. Alterar o estado de algum componente no lado cliente [browser] através de javascript e esperar que isso seja “entendido” pelo JSF
    26. Firebug
    27. SOLUÇÃO?
    28. Alterar o estado do componente no lado servidor via AJAX e re-renderizar o componente
    29. 6º Mau hábito
    30. Utilização demasiada de parâmetros de request e desenvolvimento voltado a "chave primária"
    31. <h:dataTable value="#{users}" var="user"> <h:column ...> <h:commandLink value="X" action="#{bean.remove}" > <f:param name="id" value="#{user.id}"/> </h:commandLink> </h:column> </h:dataTable>
    32. public void remove(){ Integer id = new Integer( facesContext.getExternalContext(). getRequestParametersMap(). get(“id”) ); User user = search(id); if(user != null){ ... } }
    33. SOLUÇÃO?
    34. Pensar mais orientado a objetos e deixar com que os componentes troquem objetos e não “chaves primárias”
    35. <h:dataTable value="#{users}" var="user"> <h:column ...> <h:commandLink value="X" action="#{bean.remove}" > <f:setPropertyActionListener value="#{user}" target="#{bean.user}"/> </h:commandLink> </h:column> </h:dataTable>
    36. public void setUser(User user){ this.user = user; } public void remove(){ if(user != null){ // ... } }
    37. É fundamental implementar os métodos equals() e hashCode() das entidades da aplicação.
    38. 5º Mau hábito
    39. Usar o valor do submittedValue de um componente como se fosse o valor real do componente.
    40. Apply Restore Process Request View Validations Values Update Render Invoke Model Response Application Values
    41. //immediate=false private UIInput input; //immediate=true public void calcTaxes(ActionEvent e) { String dateStr = (String) input.getSubmittedValue(); Date date = convertDate ( dateStr ); if( date.after ( otherDate ) ) { //calculate } }
    42. SOLUÇÃO?
    43. Dividir o formulário em subforms
    44. private Date date; //immediate=false public void calcTaxes(ActionEvent e) { if( date.after ( otherDate ) ) { //calculate } }
    45. A quem recorrer? ✔ Myfaces Tomahawk [t:subform] ✔ Myfaces Trinidad [tr:subform] ✔ JBoss Richfaces [a4j:region]
    46. 4º Mau hábito
    47. Implementam o próprio mecanismo de SEGURANÇA
    48. public class LoginPhaseListener implements PhaseListener { //on RESTORE_VIEW public void afterPhase(PhaseEvent e) { if( !isLoggedIn() && !isLogin() ){ //navigate to login page } } }
    49. SOLUÇÃO?
    50. Utilizem um framework especializado
    51. Usar /faces/* ou *.jsf quando se tem páginas em xhtml pode levar a uma exposição do código fonte.
    52. 3º Mau hábito
    53. Paginação de registros na session
    54. Uma das melhores maneiras de matar a escalabilidade da aplicação é a utilização indiscriminada da session
    55. SOLUÇÃO?
    56. Paginação sob demanda
    57. 2º Mau hábito
    58. Efetuar consultas de maneira INEFICIENTE
    59. <h:dataTable value="#{bean.usersList}" var="user"> <h:column ...> ... </h:column> </h:dataTable>
    60. public class Bean { public List<User> getUsersList() { return service.findAllUsers(); } }
    61. SOLUÇÃO?
    62. Usar consultas em eventos ou callbacks
    63. public class Bean { @PostConstruct public void initialize(){ this.users = service.findAllUsers(); } public List<User> getUsersList() { return this.users; } }
    64. public class Bean { public void search(ActionEvent e){ this.users = service.findUsers( … ); } public List<User> getUsersList() { return this.users; } }
    65. 1º Mau hábito
    66. 1º -e o pior- Mau hábito
    67. JSF LIFECYCLE
    68. JSF LIFECYCLE A maioria dos desenvolvedores NÃO entendem
    69. JSF LIFECYCLE SOLUÇÃO?
    70. http://balusc.blogspot.com /2006/09/debug-jsf-lifecycle.html Entendam o ciclo de vida
    71. Concluindo..
    72. Perguntas?
    73. Obrigado! twitter.com/rponte twitter.com/tarsobessa
    SlideShare Zeitgeist 2009

    + tarsobessatarsobessa Nominate

    custom

    544 views, 2 favs, 3 embeds more stats

    Apresentação sobre Maus Hábitos em JSF realizada more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 544
      • 439 on SlideShare
      • 105 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 12
    Most viewed embeds
    • 99 views on http://www.tarsobessa.com
    • 5 views on http://jujo00obo2o234ungd3t8qjfcjrs3o6k-a-sites-opensocial.googleusercontent.com
    • 1 views on https://jujo00obo2o234ungd3t8qjfcjrs3o6k-a-sites-opensocial.googleusercontent.com

    more

    All embeds
    • 99 views on http://www.tarsobessa.com
    • 5 views on http://jujo00obo2o234ungd3t8qjfcjrs3o6k-a-sites-opensocial.googleusercontent.com
    • 1 views on https://jujo00obo2o234ungd3t8qjfcjrs3o6k-a-sites-opensocial.googleusercontent.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories