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.
Em que situação o tema útil:
Este tema é útil a todo desenvolvedor interessado em ter mais uma excelente opção Java para desenvolvimento web em sua caixa de ferramentas.
Resumo DevMan:
Neste artigo vamos aprender como tornar o código mais eficiente e reutilizável com o uso de herança e classes genéricas. Também veremos como reduzir 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.
Autor: Washington Botelho dos Santos
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 (T) para indicar qual entidade será tratada no momento de utilizá-la. Veja que só são aceitas classes que estendem AbstractEntity, ou seja, deve ser uma entidade que obrigatoriamente tenha um ID.
A classe GenericBusiness precisará do EntityManager e de um Class, que servirá para manter o tipo da classe recebido através do argumento genérico T. Esta classe a ser manipulada será capturada no construtor da classe genérica, como mostra a Listagem 2.
Listagem 2. GenericBusiness: classe genérica que mantém o CRUD do sistema.
protected GenericBusiness(EntityManager manager) {
this.manager = manager;
this.clazz = (Class<T>)
((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
No construtor é recuperado o tipo da classe contido no argumento T. Através da classe atual, GenericBusiness, o tipo genérico é recuperado e convertido para o tipo parametrizado. Com isso o método getActualTypeArguments() recupera uma lista de argumentos e devolve apenas o primeiro por meio de seu índice [0], que é exatamente o tipo genérico. Por fim, este tipo genérico é convertido em um Class para que possamos saber qual classe a nossa classe genérica irá manipular. Quanto ao manager, continua com a sua injeção normalmente, porém não iremos mais injetá-lo em cada camada de negócios, pois ele também será herdado.
...Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.