Pensando em um ObjectDAO, pai de uma classeDAO

1 resposta
B

Oi gente =)

Eu tava aqui codificando minha primeira aplicação padronizada em Java, em 3 camadas, no modelo mvc, quando percebi uma coisa: Minhas classesDAO possuem uma coisa em comum entre todas elas. Todas tem um attributo connection e realizam a conexão com o banco de dados no constructor através da minha fábrica de conexões.

Segue um código exemplo de uma de minhas classesDAO

public class CargoDAO {
	
	Connection connection = null;

	public CargoDAO() throws SQLException {
		
		this.connection = ConnectionFactory.getConnection();
				
			
		}
	
	
	public Cargo pesquisaId(int id) throws SQLException{
	
                ...
				
		return cargo;
			
	}
}

Baseado na observação, pensei que seria conveniente para eu não ter que ficar redigitando o atributo connection e redigitando o código do constructor em todas as classes, se haveria a possibilidade de eu criar uma classe que e fizesse as classes dao herdarem dela o atributo e o constructor, de modo que eu apenas precise codificar ao métodos, mas ainda assim tenha acesso a conexão e continue dentro do conceito da orientação a objetos, ou seja, sem que todas as classes possam sair mexendo nos atributos da ObjectDAO para não ter problemas de erros de lógica ou coisa parecida....

Será que alguém poderia me ajudar a implementar uma situação dessas?

Criei a classe
abstract public class ObjetoDAO {

private Connection connection;
	
	public ObjetoDAO() throws SQLException {
		this.connection = ConnectionFactory.getConnection();
	}

	public Connection getConnection() {
		return connection;
	}

	public void setConnection(Connection connection) {
		this.connection = connection;
	}
	
}

mas comecei a ficar confuso na hora de obter a conexão... porque não posso instanciar o ObetoDAO por ele ser abstrato... Por outro lado se eu não instanciar não posso usar o getConnection. Ainda nessa linha, se eu transformar o atributo e o getter e o setter em statico, acho que não vou ter uma conecction para cada classeDAO que precisar acessar, podendo gerar erros de lógica. O construcutor também não pode ser statico, o que também não adiantaria muita coisa... Não sei se deu pra entender minha intenção... Tentar inicializar a connection já com valor de
'ConnectionFactory.getConnection();
' tbm não deu certo,,, não consigo receber a connection na classeDAO filha da ObjetoDAO...

Será que alguém pode me ajudar? =x

Abs
Well

1 Resposta

kskta

fala ai BlobWell

aqui tenho um sistema que utilizo o pattern ServiceLocator para isso, vc pode ler mais sobre ele aqui :
[url]http://java.sun.com/blueprints/corej2eepatterns/Patterns/ServiceLocator.html[/url]

e aqui:
[url]http://www.javafree.org/news/view.jf?idNew=262[/url]

como o ServiceLocator tbm usa o Singleton, pocure saber mais sobre ele tbm (tem no site da Sun) e aqui tbm
[url]http://www.guj.com.br/posts/list/44894.java[/url]

e aqui:
[url]http://blog.caelum.com.br/2006/08/08/singletons-e-static-perigo-a-vista/[/url]

porem basicamente é :

public class DatabaseLocator {
    

    //a classe instancia ela mesma
    private static DatabaseLocator INSTANCE = new DatabaseLocator();

    
    private DatabaseLocator() {
    }
    
    public static DatabaseLocator getInstance() {
        return INSTANCE;
    }
    
    public Connection getConnection() {
    ...
    }
}

e na sua DAO vc utiliza assim:

conn = DatabaseLocator.getInstance().getConnection();

falow!

Criado 1 de dezembro de 2006
Ultima resposta 1 de dez. de 2006
Respostas 1
Participantes 2