Singleton para conexão com o BD - Melhor forma
18/06/2013
0
Estou evoluindo, já estou me metendo a estudar padrões de projeto :p
Vi que o padrão Singleton diz pra criar uma única instância de um objeto e que uma das aplicações comuns é para conexões com o banco de dados. Correto até aqui, né?
Após várias pesquisas, encontrei uns exemplos, mas fiquei com dúvida sobre qual seria a melhor forma. Criei uma classe estática chamada Conexao e dentro dela uma propriedade SqlConnection. Então criei um método para acessar essa conexão externamente.
Poderiam me dar opiniões sobre a forma como estou fazendo?
Está assim:
public static class Conexao { private static SqlConnection _conexao; public static SqlConnection GetConexao() { return _conexao; } }
Aí tipo quando eu quero usar essa conexão eu chamo Conexao.GetConexao().
Muito obrigada.
Rachel Andrade
Posts
18/06/2013
Thiago Porto
public static class Conexao {
private static SqlConnection _conexao;
public static SqlConnection GetConexao()
{
if (_conexao == null)
_conexao = new SqlConnection();
return _conexao;
}
}
18/06/2013
Thiago Porto
18/06/2013
Rachel Andrade
Da forma que estava não estava instanciando a SqlConnection.
Mas e pra abrir/fechar a conexão? Como eu faria isso externamente se a propriedade é privada e eu só a acesso a partir de um método?
Seria algo como:
Conexao.Getconexa().Open();
Parece meio estranho.
18/06/2013
Rachel Andrade
O código é:
Conexao.GetConexao().Open()
e
Conexao.GetConexao().Close()
Mas está estranho, hein.
Obrigada.
19/06/2013
Rachel Andrade
Me tire uma última dúvida, por favor:
Se eu fizer assim está errado?
SqlCommand cmd = new SqlCommand("instrução sql"); cmd.Connection = Conexao.GetConexao(); //Abrir a conexão: cmd.Connction.Open(); //Executar o comando cmd.ExecuteNonQuery(); //Fechar a conexão cmd.Connection.Close()
Ou seja, eu abri e fechei a conexão a partir do cmd e não da classe Conexao diretamente.
Isso é aceitável segundo as boas práticas e padrões de projeto?
Obrigada mais uma vez.
21/06/2013
Joel Rodrigues
Eu particularmente não acho erado fazer dessa forma que você citou. Afinal, você não está acessando o objeto Conexao diretamente, mas sim qualquer SqlConnection que esteja ligada ao seu SqlCommand.
O resultado é o mesmo, mas eu optaria por usar a segunda forma, apenas para não ficar chamando o método GetConexao o tempo todo.
24/06/2013
Rachel Andrade
Eu particularmente não acho erado fazer dessa forma que você citou. Afinal, você não está acessando o objeto Conexao diretamente, mas sim qualquer SqlConnection que esteja ligada ao seu SqlCommand.
O resultado é o mesmo, mas eu optaria por usar a segunda forma, apenas para não ficar chamando o método GetConexao o tempo todo.
Dúvida tirada.
Obrigada a todos.
24/06/2013
Joel Rodrigues
Sendo assim, estou marcando o tópico como Concluído.
Clique aqui para fazer login e interagir na Comunidade :)