Design Patterns - DAO e Value Object

3 respostas
Marques

Pessoal,

Alguém tem algum material tipo how to ou hello world que ensine como se utiliza os padrões DAO e Value Object?

3 Respostas

E

Bem tenho quase certeza q no site da sun, na parte de blue prints, tem algo sobre VO e DAO

rarondini

segue link.
http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html

Rafael_Steil

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

Criado 13 de maio de 2003
Ultima resposta 13 de mai. de 2003
Respostas 3
Participantes 4