Injetar ou estender um DAO

Tenho a seguinte dúvida sobre as formas de desenvolvimento abaixo.

Qual é a mais coerente em se fazer.

No exemplo o desenvolvedor precisa somente de buscar todas as pessoas no banco.

Exemplo 1 com Injeção

public class PessoaBean {
    @Inject PessoaBO pessoaBO;
    @Inject PessoaDAO pessoaDAO;

    List<Pessoa> lista = pessoaBO.listarPessoas();

    // ou

    List<Pessoa> lista = pessoaDAO.findALL();    
}

public class PessoaBO {
    @Inject PessoaDAO pessoaDAO;

    // Método usado só para chamar o DAO
    public List<Pessoa> listarPessoas() {
        return pessoaDAO.findALL();
    }
    // métodos de negócio
}

public class PessoaDAO {
    public List<Pessoa> findALL() {
        return super.findALL();
    }
}

Exemplo 2 - Usando extends

public class PessoaBean {
    @Inject PessoaBO pessoaBO;    

    List<Pessoa> lista = pessoaBO.findALL();
}

public class PessoaBO extends PessoaDAO {
    // métodos de negócio
}

public class PessoaDAO {
    public List<Pessoa> findALL() {
        return super.findALL();
    }
}

Vamos la

  1. não use herança de qq jeito. herança vc cria um relacionamento É UM e, muitas vezes, vc pode/deve usar composição ( TEM UM ). Não faz sentido criar uma especialização do seu DAO. DAO tem uma responsabilidade que é acessar o banco de dados. não abuse disso. se vc estivesse usando testes unitarios veria como é complexo o teste nesses casos.

  2. em 2007 o Phillip Calçado ja falava sobre contra a arquitetura BOLOVO

1 curtida

O desenvolvedor vai precisar buscar qualquer coisa que precisar conforme novos requisitos do negócio. Não fique complicando a vida do desenvolvedor com obstáculos técnicos sem sentido prático.

Obrigado pela resposta peczenyj, ficou claro agora. A dúvida ficou pelo fato de ter um método no PessoaBO somente para chamar uma lista de Pessoas do PessoaDAO. Se usar o DAO na camada de view somente para consultas no banco, essa prática é viável ?