38
Como escolher o framework MVC? MSc. Anderson V. de Araújo

Como escolher o Framework Java para web?

Embed Size (px)

DESCRIPTION

Como escolher o Framework Java para web? Comparações entre os frameworks: Java, Web, Struts2, Spring MVC, JSF.

Citation preview

  • 1. MSc. AndersonV. de Arajo
  • 2. It`s me, Mario!about.me/andvicoso
  • 3. Desenvolvimento: Java: Desktop (+10 anos) e web (+ 7 anos) .NET reaAcadmica: Inteligncia Artificial Processamento de imagens Linguagens de Programao
  • 4. BSc. em Cincia da Computao pela UFMS, 2004 MSc. em Informtica pela UFPR, 2006 Minerao de Imagens Projeto FootScanAge DSc. Student no ITA Projeto HARPIA (SRF) IntelignciaComputacional Aplicada ao Gerenciamento de Risco IntelignciaArtificial Multi-Agent Learning Jan/2011 Atual: Professor na Fatec SJC Programao - Java
  • 5. !
  • 6. A inteno aqui no definir qual oMELHOR framework MVC para Java web; dar opes! Falar um pouco de cada e mostrar exemplosem cdigo; Foco no Controller; Matt Raible Compara frameworks desde 2004; Links para algumas comparaes dele no final;
  • 7. Servlets 3.X JSF 2.X Struts2 Spring MVC VRaptor Play!
  • 8. Podemos fazer os mapeamentos (Servlets eFiltros) usando anotaes! UHUUU! Controller : Deve estender de HttpServlet; Deve ser mapeado a uma URL (XML ou anotaes);
  • 9. Pontos positivos: Padro Java EE; Bastante difundido (1.0 em 1997); Bom para o aprendizado de conceitos bsicos: Request, response, session, parameter, filter, ... Pontos negativos: Pegar parmetros da requisio; Validao; Mensagens/Internacionalizao; Etc;
  • 10. Component-based framework; Controller: Todos devem ser anotados com @ManagedBean paraserem visveis na view Deve ser anotado com uma anotao de escopo naqual o bean vai estar disponvel; @NoneScoped, @RequestScoped, @ViewScoped,@SessionScoped, @ApplicationScoped e @CustomScope Os mtodos do managed bean so acessveis na view(xhtml) atravs das tags do JSF
  • 11. Pontos positivos: Padro Java EE Bastante difundido (1.0 em 2004) Alta empregabilidade (ainda) Vrias bibliotecas de componentes disponveis Facilidade no uso de componentes ricos e Ajax; Pontos negativos: Sopa de tags no jsps; Pode ser ruim para designers; Muito acoplamento entreView e Controller Chato de testar Aprende menos CSS, HTML e JS FacesContext.getCurrentInstance().getExternalContext()
  • 12. @ManagedBean@ViewScoped //Poderia ser outro escopopublic class UserController implements Serializable {private UserDao dao;private User user;@PostConstructpublic void init() {user = new User();dao = new UserDaoJPA();//Poderia ser injetada!}public String add() {dao.create(user);user = new User();return "list";}//getters e setters omitidos
  • 13. Cadastro de usuriosCadastro de Usurio
  • 14. Action-based framework; Juno do Struts com oWebWork Configurao: Antigamente tinha muita em XML Atualmente boa parte pode ser feita usando anotaes Convention Plugin (CP) facilita muito a vida Convention over configuration (coding by convention) Controller: Convention Plugin: Deve conter um pacote com um dos nomes: struts, struts2, action ouactions. Nele devem estar as actions Os paths so definidos por pacotes na hierarquia As actions devem ser anotadas com @Action(url) Os resultados (retornos) so definidos com @Result Em geral, estendem de ActionSupport
  • 15. Pontos positivos: Bastante difundido (1.0 2000, 2.0 - 2007) Alta empregabilidade (ainda) Vrios plugins: Bootstrap, Convention, JQuery, ... Com tags de componentes (pode ser um ponto negativo) Interceptor Pontos negativos: Pode ter sopa de tags no jsps; Documentao muito espalhada e mal organizada; Fcil confundir com a verso 1 em uma googlada Pode ter muito XML na configurao, alm do properties
  • 16. @Results({ @Result(name = "success",type = "redirectAction", params = {"actionName", "list}),@Result(name = "input", location = "add.jsp") })public class AddUserAction extends ActionSupport {private User user = new User();@Action("add")public String add() {return INPUT;}@Action("put")public String put() {UserDao dao = new UserDaoJPA();//Poderia ser injetada!dao.create(user);return SUCCESS;}//getters e setters omitidos}
  • 17. Action-based framework; As caractersticas do Spring podem serutilizadas independentemente (DI, Aspects, ...) Webservices RESTful podem ser criados atravsde anotaes. Controller: Classe deve ser anotada com @Controller Mtodo de ao deve ser anotado com@RequestMapping(url") Parmetros com @RequestParam
  • 18. Pontos positivos: Fcil aprendizado No precisa de getters e setters como Struts2 e JSF Fcil aprendizado Forma de redirecionamento, REST, validao , einternacionalizao so bem fceis. Comunidade crescendo rapidamente Pontos negativos: Pode ter muito XML na configurao Configurao com anotaes ainda muito incipiente Requer experincia pra configurar inicialmente
  • 19. @Controllerpublic class UserController {@Injectprivate UserDao dao;//injetado@RequestMapping(value = "/user/put", method =RequestMethod.POST)public String put(@ModelAttribute User user) {dao.create(user);return redirect:/user/list;}@RequestMapping(value = /user/add")public String add() {return user/add";}}
  • 20. Caelum Cursos e apostilas; Brasileiro! Nasceu em 2003 no IME-USP Convention over Configuration Controller: Deve ser anotado com @Resource e o nome da classedeve terminar com Controller Ex.: FuncionarioController. O path de acesso fica /funcionario/{nomeDoMetodo} O mtodo pode ser anotado com @Path para alterar
  • 21. Pontos Positivos: Documentao em portugus! Fcil aprendizado Forma de redirecionamento, REST, validao , injeo dedependncias e internacionalizao so bem fceis. No precisa de getters e setters como o Struts2 e JSF Interceptor Pontos Negativos: Baixa utilizao fora do Brasil Comunidade pequena Baixa empregabilidade
  • 22. @Resourcepublic class UserController {private UserDao dao;private Result result;private Validator validator;public UserController(UserDao dao, Result result, Validator validator) {this.dao = dao;this.result = result;this.validator = validator;}@Getpublic void add() {}@Postpublic void put(User user) {validator.checking(getValidations(user, false));validator.onErrorUsePageOf(UserController.class).add();dao.create(user);result.redirectTo(this).list();}private Validations getValidations(final User user, final boolean isEdit) {return new Validations() {{that(StringUtils.isNotBlank(user.getName()), "error", "name.empty");that(StringUtils.isNotBlank(user.getPhone()), "error", "phone.empty");}};}}
  • 23. Vamos aos fatos!
  • 24. Servlets** JSF Struts 2 Spring MVCLivros (Amazon.com) 1,104 334 690 149Linked in Skills 144k (-7) 77k (-5%) 161k (-10%) 494k***(+5%)ndice de pesquisa doGoogle EUA (jun13)5 34 11 14* vraptor - zero ou no foi possvel pesquisar.** Difcil de mensurar, pode ser utilizado em conjunto com outras tecnologias.*** Foi possvel a pesquisa apenas por Spring.
  • 25. Importncia dosframeworks pelosdesenvolvedores-InfoQ (EUA, Jun13)
  • 26. OrdemMatt`sWeightedTheServerSideJava SymposiumThe Rich WebExperience(RWX) 2010Devoxx20101 Grails Grails Grails GWT2 Play GWT GWT Rails3 Spring MVC Rails Rails Spring MVC4 Rails / Vaadin Spring MVC Spring MVC Grails5 GWT Vaadin Tapestry / Vaadin Wicket / Struts 2
  • 27. Quem disse que ia ser fcil?
  • 28. Que tipo de aplicao que voc estconstruindo? Projeto Comunitrio? Manuteno CaractersticasTcnicas
  • 29. No acredite em blogs e artigos Tente voc mesmo! Acredite desenvolvedores, no evangelistas Aqueles que tm experincia com o framework etenham usado na produo Cuidado com os interesses corporativos Os livros so um bom sinal! Sempre!
  • 30. Frameworks tm pontos fracos a suaaplicao um deles? Escolha 2-3 frameworks para o seu tipo deaplicao ... e prottipo! Se a prototipagem for dolorosa, mude! Depois de prototipar em mais de umframework, pare e compare
  • 31. No tenha medo de: Experimentar novos frameworks Usar frameworks antigos Manter o seu framework existente
  • 32. No existe MELHOR framework; timo ter competio! Os desenvolvedores devem saber mais que umframework Voc deve tentar um framework antes de ficarfalando mal dele Fazer uma boa pesquisa pode economizartempo e dinheiro no futuro
  • 33. Matt Raible Comparative table; Talk at Jfokus 2012; http://github.com/andvicoso http://andvicoso.blogspot.com
  • 34. Perguntas?about.me/andvicoso