O que manda as boas práticas?

Pessoal,

Tenho DAOs para cada tabela da minha aplicação, de forma que se preciso recuperar um cliente faço da seguinte forma:

cliente = clienteDAO.recuperarCliente(idCliente)

Só que agora vou desenvolver um relatório em que preciso fazer várias queries complexas para chegar ao resultado desejado.

Pergunto: Nesses casos o que vc faz? Faz-se um DAO para esse caso em particular ou mistura codigo sql ao action? Ou existe outra saida?

Muito obrigado,

Marques

Se não consegue recuperar através dos Objetos DAO´s, uma opção é criar um DAO específico para situações assim, tipo de um GenericDAO

O problema é que você está pensando em tabelas, não em objetos.

Não tenha um DAO por tabela, tenha um DAO por classe (ou nem isso), porque uma classe pode ser persistida em várias tabelas, ou várias classes em uma tabela só.

Pense em objetos.

Shoes

Eu nem tenho DAOs. Tenho apenas uma classe GerenciadorConsultas. Nela, tenho todas as consultas. Ex:

public static List getClientes(String nome);
public static List getTodosClientes();
public static List getTodosDescricoesMateriais();

Como meu programa não vai ser muito grande, desse jeito está legal.

[quote=ronaldorezende]Eu nem tenho DAOs. Tenho apenas uma classe GerenciadorConsultas. Nela, tenho todas as consultas. Ex:
[/quote]

E isso é diferente do DAO exatamente em que (alémd e ser uma estratégia possível co o padrão)?

Não sei. Só sei que faço assim. Se isso também é DAO, faço sem saber.

Será que alguém realmente faz um DAO pra cada classe ou cada tabela?

Vixe!

Acho que um DAO genérico de CRUD e outros DAOs pra fazer coisas mais específicas é mais do que o suficiente.