none
Classe Singleton com SQL Server RRS feed

  • Pergunta

  • Estou com uma dúvida, andei pesquisando sobre o padrão Singleton, e vi que algumas pessoas aplicam para obter uma unica instancia da SqlConnection, porém não entendi a diferença nesse padrão. O que há de diferente em obter uma unica conexao e criar uma new a cada chamada de um método?

    https://www.vivaolinux.com.br/script/Construindo-uma-classe-de-conexao-com-banco-de-dados-em-C-utilizando-design-pattern-Singleton

    quinta-feira, 26 de janeiro de 2017 18:50

Respostas

  • Olá!
    O padrão Singleton é utilizado para quando você quer evitar instanciar a cada utilização um objeto,para retornar sua instancia.Isso pode ser interessante pra controlar concorrência entre objetos.

    A vantagem de utilizar ai no seu exemplo seria controlar o pool de conexão, ja que usando singleton você usaria o mesmo pool.

    Apenas um adendo: muitos consideram o Singleton um Anti-Pattern:
    https://www.michaelsafyan.com/tech/design/patterns/singleton
    Use com bastante moderação.

    --
    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta
    quinta-feira, 26 de janeiro de 2017 18:57

Todas as Respostas

  • Olá!
    O padrão Singleton é utilizado para quando você quer evitar instanciar a cada utilização um objeto,para retornar sua instancia.Isso pode ser interessante pra controlar concorrência entre objetos.

    A vantagem de utilizar ai no seu exemplo seria controlar o pool de conexão, ja que usando singleton você usaria o mesmo pool.

    Apenas um adendo: muitos consideram o Singleton um Anti-Pattern:
    https://www.michaelsafyan.com/tech/design/patterns/singleton
    Use com bastante moderação.

    --
    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta
    quinta-feira, 26 de janeiro de 2017 18:57
  • Quando se trabalha com esse padrão, você garante uma instância de uma determinada classe, que pode ser utilizada em várias outras, não precisando assim ter várias instâncias da mesma classe. No caso de Conexões com banco de dados isso é bem utilizado, garante 1 conexão ativa por projeto diminuindo a concorrencia

    Exemplo:

    using System.Data.SqlClient;
    namespace Singleton
    {
        public class SQLServerConnection
        {
            private static SqlConnection _conn;
            public static SqlConnection Instance
            {
                get
                {
                    if (_conn == null)
                    {
                        _conn = new SqlConnection("Connection_String");
                    }
                    return _conn;
                }
            }
        }
    
        public class DaoPosts
        {
            public DaoPosts(SqlConnection connection)
            {
    
            }
        }
    
        public class DaoMessages
        {
            public DaoMessages(SqlConnection connection)
            {
    
            }
        }
    }

    Como utilizar esse código:

    DaoPosts daoPosts = new DaoPosts(SQLServerConnection.Instance);
    DaoMessages daoMessages = new DaoMessages(SQLServerConnection.Instance);
    As duas classes utilizam da mesma instância de conexão, isso é muito bom porque as operações são parecidas e isso ajuda não comprometer o trafego de informações, desempenho e instâncias desnecessárias.


    Não é considerado um Padrão de Projeto, porque fere os principios da Orientação a Objeto.

    Fulvio C


    quinta-feira, 26 de janeiro de 2017 19:08
  • O Singleton é considereado por muitos como um anti-pattern e realmente se for mal usado ele é. 

    Variaveis globais sao indesejaveis na programaçao orientada a objeto e um singleton se apoxima muito de uma variavel global. 

    Pense assim, se voce precisar testar um dos seu metodos e este dependa de um singleton de conexao, entao é um sinal que existe um alto alto grau de dependencia.

    Em termos estruturais o ideal é usar injeçao de dependencia. Mas em termos de simplicidade é claro que Singleton é a escolha mais obvia (lembre-se que nem sempre o caminho mais facil é o que tera melhor resultado)

    Veja aqui um excelente artigo do  Paulo Silveira  (antigo, mas ainda excelente)

    http://blog.caelum.com.br/singletons-e-static-perigo-a-vista/

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    quinta-feira, 26 de janeiro de 2017 19:22
    Moderador