Pessoal,
Alguém tem algum material tipo how to ou hello world que ensine como se utiliza os padrões DAO e Value Object?
Pessoal,
Alguém tem algum material tipo how to ou hello world que ensine como se utiliza os padrões DAO e Value Object?
Bem tenho quase certeza q no site da sun, na parte de blue prints, tem algo sobre VO e DAO
Mas tambem nao tem muito segredo. A grosso modo, um uso comum pra DAO eh fornecer um conjutno de interfaces, que as classes especializadas devem implementar, e VO simplesmente te retorna todo o resultado em uma Collection, por exemplo, ao inves de precisar ficar iterando cada item de um ResultSet.
Logico que ha varias implementacoes possiveis, mas essa eh uma bem simples e funcional.
Por exemplo, digamos que voce queira que o acesso aos dados do teu sistema possa ser feito usando qualquer tipo de fonte ( seja ela arquivos textos, RMI ou algum banco de dados qualquer ). Usando uma simples classe “Pessoa” como exemplo, com acoes de inserir, editar, deletar e selecionar todos os registros, a interface para DAO poderia ficar assim:
// Implementacao basica da interface
interface PessoaDAO
{
public int addNew(Pessoa p);
public void update(Pessoa p);
public void delete(int pessoaId);
public ArrayList selectAll();
}
// Agora, cada fonte de dados diferente
// implementa PessoaDAO, manipulando internamente
// os dados da maneira que achar melhor
// No exemplo abaixo, temos implementacao tanto
// para um banco de dados X
public class PessoaDB implements PessoaDAO
{
public int addNew(Pessoa p)
{
// Cria PreparedStatements,
// seta os dados pegando os
// valores de 'p' e executa
// a query
return idGeradoPelaInsercao;
}
public void update(Pessoa p)
{
// mesmo esquema do addNew...
// pega os sqls e executa
}
public void delete(int pessoaId)
{
// mais acoes no banco de dados
}
// Este metodo, em termos, ja daria
// para chamar de um Value Object
public ArrayList selectAll()
{
// Aqui executa um
// SELECT * FROM pessoa,
ArrayList pessoasList = new ArrayList();
// ...
while (rs.next()) {
Pessoa p = new Pessoa();
p.setNome(rs.getString("nome"));
// ...
pessoasList.add(p);
}
// Retorna a colecao de "Pessoa"s
return pessoasList;
}
}
Note que eh soh uma exemplificacao, geralmente os VO sao manipulados em um nivel mais algo, amplo, mas a ideia basica eh essa.
Ainda com DAO, pelo menos para o exemplo acima, eh muito comum voce ter um “Factory” ou um “Absctract Factory”, que se encarregara de retornar o tipo de DAO especifico ( por exemplo, um PessoaDB ou um PessoaTXT ).
Eh meio raro voce usar um pattern sozinho, quase sempre estara usando varios em conjunto.
Rafael