quinta-feira, 12 de agosto de 2010

Usar ou não DAO com JPA?

Usar ou não DAO com JPA? Uma questão que acho interessante, apesar de já ter sido bastante discutida, me levou a procurar uma boa saída para um projeto em específico. Portanto não coloco aqui a arquitetura que acho melhor ou pior para um sistema, mas sim a que achei melhor para um cenário específico. Acredito que cenários parecidos com este devem se repetir muitas vezes, portanto talvez seja até uma forma de documentar minha justificativa para tal modelo quando for necessário.

Com a criação da especificação JPA a qual é um padrão JEE, bem como sua ampla utilização no mercado, acaba aumentando as chances de que não será necessário alterar a implementação de acesso a dados (Considerando-se a especificação e não o DBMS em si). Uma vez que neste nível de abstração tem-se pouca chance de modificação, como justificar a criação de uma interface para utilização da JPA? Porque não utilizar o EntityManager diretamente na camada de negócios ou serviços?

A utilização de um modelo Controller/ Service/ DAO ao invés de um modelo Controller/ Service era justificada então no meu projeto apenas por uma questão: desacoplamento na camada de serviço.

Hoje minha camada de Serviços está sendo criada com o Spring, o qual recebe por DI (Dependency Injection) uma implementação da interface DAO. Deste modo, caso futuramente, eu queira trocar a minha camada de serviços para ser implementada com EJB3, poderei fazer isso sem muitos esforços?

Para transformar minhas classes em SLSB ou SFSB que hoje são POJOs, qual será o esforço? Anotações EJB deverão ser colocadas nas minhas classes? Caso seja possível definir tudo em XML qual é a vantagem em utilizar EJB3 posteriormente em termos de facilidades agregadas? Além disso, mesmo com o EJB, posso continuar injetando meu EntityManager na camada de serviço assim como no Spring.

Diante deste cenário, não consigo encontrar justificativa para utilizar DAO no projeto, uma vez que só estava criando uma camada a mais com praticamente os mesmos métodos da camada de serviço gerando apenas trabalho a mais e piorando a manutenibilidade.

Qualquer posição quanto ao assunto, gostaria de discutir modelos melhores ou piores :) .

Abaixo, algumas das referências que pesquisei antes de decidir o modelo da minha aplicação:


Blog do Spock
Usar ou não DAO nos tempos do JPA?

InfoQ
Has JPA Killed the DAO?

Nenhum comentário:

Postar um comentário