Artigo no estilo Mentoring

Mentoring:Este artigo visa mostrar de forma prática o uso e a criação de extensões CDI. Como exemplo, será refatorada uma simples aplicação web que deve se comportar de uma maneira diferente de acordo com as características específicas do servidor em que for distribuída.

A característica que será considerada no artigo é a localização geográfica, ou região.

Note que é possível atender a esse requisito sem utilizarmos o poder da injeção de dependências e da inversão de controle, porém, deste modo, podem ser criadas soluções que não fazem um bom uso da orientação a objetos, perdendo em flexibilidade, manutenibilidade, adaptabilidade e até mesmo em legibilidade.

Em contrapartida, com o uso de extensões CDI conseguimos sanar o problema viabilizando uma aplicação com baixo acoplamento e de fácil manutenção.

Existem situações em que é preciso que o sistema seja parametrizado para permitir que seu funcionamento seja alterado sem a necessidade de compilação ou realização de um novo deploy. Para isso, muitas vezes são criados arquivos de configuração que definem o comportamento do sistema, regras de acesso a funcionalidades, log, etc.

Geralmente, esses arquivos possuem conteúdo diferente para ambientes de desenvolvimento e produção, ficando a cargo do desenvolvedor tomar o devido cuidado para não confundir os arquivos e não realizar o deploy da aplicação com o arquivo errado.

Observe que, dependendo da situação, podemos diminuir a complexidade do processo de deploy criando scripts ou soluções mais dinâmicas que determinem o comportamento do sistema em tempo de execução.

Considerando uma aplicação que possua acesso a dados ou parâmetros que possam ser usados para definir o comportamento da mesma de forma dinâmica, ainda assim é necessário que tomadas de decisão sejam definidas no código fonte.

Estas tomadas de decisão podem ser escritas através de simples ifs ou utilizando polimorfismo em conjunto com boas práticas de orientação a objetos.

Já com o uso da injeção de dependências, simplificamos a construção de um bom design orientado a objetos, o que pode ser viabilizado ao adicionar CDI ao projeto.

Através do CDI, mais precisamente a partir de extensões, é possível implementar uma solução para o cenário citado sem a necessidade de escrever vários ifs no código.

Deste modo, para exemplificar a criação de extensões CDI, este artigo apresentará uma aplicação web envolvida em um contexto que traz como importante requisito a necessidade de implementação de uma solução dinâmica que não faça uso de arquivos de configuração. Esta aplicação encontra-se disponível no repositório online Bitbucket com o nome artigo-cdi (veja o endereço na seção Links). O Bitbucket trata-se de um serviço de hospedagem de projetos que podem ser gerenciados através de sistemas de controle de versão como Git e Mercurial.

A aplicação criada para o artigo trata-se de uma loja de livros virtual fictícia que deve atender a usuários em diferentes regiões geográficas, sendo necessário aplicar regras distintas para cálculo de impostos, ou seja, é de grande importância que a aplicação seja flexível. Mais detalhes sobre o seu funcionamento serão explicados no próximo tópico.

Dito isso, para conseguir alcançar a flexibilidade necessária e atender as diferentes regiões do mundo, suponha que foi sugerida a utilização da computação em nuvem, de modo que o serviço contratado ofereça meios para identificação da região através de uma API própria.

Como exemplo de empresa que oferece serviços de computação em nuvem, vamos considerar a Amazon, empresa que disponibiliza servidores virtuais distribuídos em diferentes regiões geográficas.

Estes servidores são oferecidos como instâncias EC2 (Elastic Compute Cloud). Dessa forma, o desenvolvedor pode criar sistemas de alta disponibilidade e aumentar a escalabilidade contratando mais instâncias de acordo com a demanda.

Esse é um exemplo de computação em nuvem entregue como IaaS, ou Infrastructure as a Service (Infraestrutura como serviço), e que também é oferecido por outras empresas como a DigitalOcean e a Microsoft, com o Microsoft Azure.

Muitos desses serviços oferecidos na nuvem permitem recuperar dados sobre a região da instância sendo utilizada através de API própria.

Na Amazon, por exemplo, quando se cria uma instância EC2, é necessário informar em qual região se deseja hospedar a aplicação. Para permitir esse tipo de funcionalidade, a Ama ...

Fim do trecho gratuito • continue abaixo
CONTEÚDO EXCLUSIVO

Desbloqueie toda a DevMedia

  • +2000 artigos e vídeos
  • +40 trilhas sobre Front-end, Back-end, IA e muito mais
  • +5000 exercícios práticos
  • Mentorias ao vivo individuais
até 50% OFF
A partir de
R$ 69 /mês
Assinar agora