DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


VRaptor 3 - Revista Java Magazine 94 - Parte 2

Neste segundo artigo da série sobre o VRaptor continuaremos o estudo desse framework durante o desenvolvimento de uma aplicação web. Destacaremos nesta etapa a preocupação com a camada de apresentação e a redução do acoplamento de nosso código






O desenvolvimento web tomou conta do mercado deixando as outras modalidades para trás. Junto com esta evolução vieram os frameworks e suas soluções que tornam a cada dia o desenvolvedor mais produtivo. Pensando em produtividade, conhecemos no primeiro artigo da série um framework que ajuda o desenvolvedor a melhorar sua performance. Assim, vimos como configurar o VRaptor 3, conhecemos suas principais características e como desenvolver um sistema baseado em CRUDs.

Na segunda parte, vamos aprender como tornar o código mais eficiente e reutilizável com o uso de herança e classes genéricas. Além disso, também será reduzido o acoplamento trabalhando com o sistema voltado a interfaces, onde o desenvolvedor passará a se preocupar com o que o código faz e não mais em como ele faz.

Até este momento nos preocupamos bastante com a codificação feita para o servidor, mas agora vamos dar mais ênfase à parte visual do sistema, que também é de suma importância. Lembre-se que “o sucesso de uma aplicação depende tanto de um modelo que funcione quanto de uma interface que seja amigável para o usuário final”. Por isso trabalharemos nesta camada tirando proveito dos templates para o reaproveitamento de código e a inclusão da biblioteca visual jQuery UI com alguns de seus componentes.

Herança

O termo herança, conhecido também fora da área de tecnologia, diz respeito a alguma característica herdada de alguém que já a possui. Na programação usamos herança para obtermos códigos que são comuns a mais de uma classe, como por exemplo, o atribute id que cada modelo da aplicação obrigatoriamente deve possuir. Desta forma será criada uma classe abstrata para manter esse atributo que poderá ser herdado por outras classes. Este atributo também já estará anotado com as configurações da JPA e o seu get() e set(), aumentando com isso o reaproveitamento do código, como pode ser visto na Listagem 1.

 

Listagem 1. AbstractEntity: entidade herdada por todas as outras entidades.

@MappedSuperclass

public class AbstractEntity {

 

  @Id

  @GeneratedValue

  private Long id;

 

  // get e set

 

}

 

Esta classe servirá de base para todos os modelos do sistema. Logo, devemos fazer com que os modelos herdem essa classe. Assim, o atributo id e seus respectivos get() e set() poderão ser removidos de todos os modelos, pois agora iremos recebê-los da entidade AbstractEntity através da herança. Veja um exemplo a seguir com a entidade Filme, mas que deverá ser feito com todas as outras entidades do sistema:

 

public class Filme extends AbstractEntity {

 

}

 

É preciso observar que a entidade abstrata só servirá para herança, por isso, no lugar do @Entity, esta classe será anotada com @MappedSuperclass. Essa anotação indica para o Hibernate que a classe não será uma entidade que terá uma representação no banco em forma de tabela, sendo apenas uma superclasse.

Nos próximos tópicos vamos criar uma classe que também será reutilizada, assim como a que acabamos de implementar, e servirá para manter os métodos do CRUD que são utilizados em todo o sistema.

Classes genéricas

A classe genérica é aquela que não recebe ou manipula um tipo exato, ou seja, ela tem a capacidade de trabalhar com vários tipos de classes diferentes. O nosso sistema possuirá a classe GenericBusiness, que será a base que manterá o CRUD. Esta classe não irá manipular um modelo específico, mas sim qualquer modelo que indicarmos, por isso ela é genérica. Assim, todas as outras classes de negócios que dependam de alguma ação do CRUD deverá herdá-la para obter estes métodos prontos. No código a seguir temos um trecho dessa classe genérica que em sua declaração recebe o tipo do modelo a ser manipulado:

 

public abstract class GenericBusiness<T extends AbstractEntity> {

 

  protected EntityManager manager;

  protected Class<T> clazz;

 

  ...

}

 

Nesta classe foi recebido um argumento genérico ("



ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    4 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Adriano Faria Alves
Bom dia , gostei muito do seu tudorial , principalmente sobre classe genérica , herança e interface.
Estou até usando o seu dao,repository e business num outro projeto de teste.Só que uma coisa eu queria mudar : Não quero usar o AbstractEntity e ao tirar ele do projeto tudo para de funcionar . Qual a adaptação do código deveria ser feita ?Obrigado !
[há +1 mês] - Responder

 

Dyego Souza Do Carmo
Voce vai precisar colocar todos os metodos do AbstractEntity dentro das entidades, feio né ? Continue usando ele heheh.
[há +1 mês] - Responder
 

Thiago De Carvalho Moreno
Ola,
Seguindo o padrao do uso dos Abstracts, seria uma boa pratica usar um AbstractBeanController? para colocar os metodos CRUD que estao no DaoGenerico.
Em termos de arquitetura ficaria assim as camadas
AbstractBeanController -> AbstractBusinessService -> DaoGenerico.
[há +1 mês] - Responder

 

Dyego Souza Do Carmo
Poderia sim , mas somente se vc usar realmente em mais de um local , caso contrario seria apenas mais uma heranca desnecessaria entende ?
[há +1 mês] - Responder
 



Publicidade
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
3   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03