[quote=santos.fernando]Em uma classe DAO de um tipo posso receber um parâmetro de outro tipo ?
Ex:
Tenho um método que lista os determinados aviso, e esse método posso receber como parâmetro um usuário ?
public listaAvisosId(Usuario usuario){
// codigo
}
ou tem que receber o mesmo tipo
public listaAvisosId(Aviso aviso){
// codigo
}
[/quote]
O padrão DAO encapsula como o nome indica, o acesso a dados. Em particular as pesquisas a esses dados. Um bom DAO é tipado para um único objeto e apenas pesquisa por esse objeto.
As pesquisas são os métodos. E os métodos sempre têm uma assinatura no seguinte padrão
public List<X> pesquisePorYeZ(Y y, Z z)
No nome não diz que pesquisa objectos X, por que isso é obvio sendo que o DAO em causa é para objetos X. Podemos ver isso porque o retorno é de objetos X.
y e z são os parametros da pesquisa. Que podem ser vários e mais que dois. Contudo, se forem muitos mais que 2, é preciso reconsiderar o uso do padrão Context Object, o famoso objecto Filtro.
A palavra “pesquisa” pode ser trocada por outra de significado semelhante como “encontrar” , “recupera” etc… As pessoas usam “lista” porque retorna uma lista, o que eu acho ruim semanticamente falando. Em inglês o padrão é find (encontrar)
O Spring Data tem todo um mecanismo baseado neste padrão de nomes.
Os parâmetros podem ser qualquer coisa. Desde que faça sentido para o sistema. no caso de pesquisar avisos por usuário, seria
public List<Aviso> pesquisaPorUsuario(Usuario usuario); // repare que a palavra "aviso" não entra no nome do método
Será que faz sentido pesquisar avisos usando outro aviso ? parece esquisito.
Mas seu método é “listaAvisoId” o que parece indicar que vc só está obtendo os Ids. Isto viola o conceito do DAO. Não devolva os Ids, devolve os objetos com os Ids (mesmo que os outros campos estejam vazios)
Se for mesmo obter os ids não chama de pesquisar porque não ha pesquisa envolvida do ponto de vista de OO. tipo
public Integer getIdOf(Aviso aviso);
Mas este método é muito obtuso porque seria mais simples
aviso.getId()