none
retornar dbcommand ou Idbcommand RRS feed

  • Pergunta

  • Ólá, estou estudando códigos genéricos para bancos de dados, e me deparei com essa dúvida.

    Qual seria a diferença de eu utilizar:
    IDBComand teste = método_que_retorna_idbcommand
    ou DBComand teste = método_que_retorna_dbCommand

    Sei que a classe dbcommand implementa a interface idbcommand, mas caso eu fosse utilizar métodos existentes na interface, qual seria mais rapido, utilizar a interface ou a classe abstrata?

    outra coisa, qual diferença entre IDataAdapter e IDbDataAdapter.

    Obrigado

    • Movido Ricardo Oneda terça-feira, 23 de junho de 2009 11:18 ([Loc]From:ASP .NET)
    terça-feira, 23 de junho de 2009 04:05

Respostas

  • Olá,

    Se você utilizar a classe DbCommand, então qualquer classe que queira extender a sua (ou interagir, se for o caso) terá que, obrigatóriamente, herdar da classe DbCommand.

    Já se você utilizar a interface IDbCommand, então você dá mais liberdade para as classes que quiserem, novamente, extender ou interagir com a sua classe, pois poderão ter qualquer hierarquia, desde que em algum ponto dessa hierarquia, alguém implemente a interface IDbCommand.

    Outro ponto a considerar, é que nem todos os métodos da classe DbCommand são virtuais (virtual), o que significa que não é possível mudar o comportamento de todos os métodos e implementar sua própria versão... Com a interface, isso é possível pois não existe qualquer herança de código... É apenas um "contrato".

    Abraços,
    Caio Proiete



    Caio Proiete Siga-me no Twitter!
    http://www.caioproiete.com
    sábado, 27 de junho de 2009 19:53
    Moderador
  • Oi,

    A diferença de optar por uma classe ou uma interface deve ser estudada em um nível mais alto.
    Sugiro um aprofundamento em orientação a objetos para entender quais as vantagens de se trabalhar com interfaces.

    As vantagens são muito interessantes, mas como eu disse, se trata de uma discussão mais ampla.
    Ou seja, em algumas linhas de código a diferença pode ser imperceptível, mas na modelagem e estruturação dos objetos e componentes do sistema, aí sim a opção por interfaces poderá trazer grandes benefícios.

    Caso se interesse em aprofundar no entendimento de interfaces um conceito interessante de estudar é Injeção de Dependência (DI).
    []'s
    Rafael Noronha
    http://rafanoronha.net/
    follow me: @rafanoronha
    terça-feira, 23 de junho de 2009 05:05

Todas as Respostas

  • Oi,

    A diferença de optar por uma classe ou uma interface deve ser estudada em um nível mais alto.
    Sugiro um aprofundamento em orientação a objetos para entender quais as vantagens de se trabalhar com interfaces.

    As vantagens são muito interessantes, mas como eu disse, se trata de uma discussão mais ampla.
    Ou seja, em algumas linhas de código a diferença pode ser imperceptível, mas na modelagem e estruturação dos objetos e componentes do sistema, aí sim a opção por interfaces poderá trazer grandes benefícios.

    Caso se interesse em aprofundar no entendimento de interfaces um conceito interessante de estudar é Injeção de Dependência (DI).
    []'s
    Rafael Noronha
    http://rafanoronha.net/
    follow me: @rafanoronha
    terça-feira, 23 de junho de 2009 05:05
  • A performance é a mesma. O compilador e o Jitter farão o trabalho de maneira quase idêntica nos dois casos.

    IDataAdapter é um adapter ligado a qualquer fonte de dados. IDbDataAdapter herda de IDataAdapter, e é específico para bases de dados relacionais.
    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    terça-feira, 23 de junho de 2009 16:33
    Moderador
  • Olá,

    A resposta da sua pergunta é diretamente proporcional à complexidade do código que você está desenvolvendo.
    Por exemplo:

    A Microsoft criou essas interfaces para facilitar o desenvolvimento de drivers para o .NET Framework. Ela usa nos drivers padrões e tudo mais.
    A classe DbCommand é a classe de mais alta hierarquia dentro do subset de classes do ADO.NET. A partir dela que vem o SqlCommand, OracleCommand, OleDbCommand entendeu?
    Mas voltando... Digamos que você esteja utilizando o MySQL e gostaria que seu código funcionasse com o driver do MySQL, mas o MySQL não usa a DbCommand. Ele implementou sua própria classe MySqlDbCommand. Pronto. Seu código já não iria funcionar. 
    Endendeu por que? Você programou diretamente para a implementação da interface IDbCommand. Se você tivesse utilizado o IDbCommand no seu código, você não teria problema algum. Todas as funcionalidades básicas descritas na IDbCommand foram absorvidas pelo seu código.

    Então, sempre que possível, faça uso das interfaces. :)

    Espero ter ajudado!!

    Plácido Bisneto - Aprendiz de Arquiteto
    quinta-feira, 25 de junho de 2009 18:29
  • Olá,

    Se você utilizar a classe DbCommand, então qualquer classe que queira extender a sua (ou interagir, se for o caso) terá que, obrigatóriamente, herdar da classe DbCommand.

    Já se você utilizar a interface IDbCommand, então você dá mais liberdade para as classes que quiserem, novamente, extender ou interagir com a sua classe, pois poderão ter qualquer hierarquia, desde que em algum ponto dessa hierarquia, alguém implemente a interface IDbCommand.

    Outro ponto a considerar, é que nem todos os métodos da classe DbCommand são virtuais (virtual), o que significa que não é possível mudar o comportamento de todos os métodos e implementar sua própria versão... Com a interface, isso é possível pois não existe qualquer herança de código... É apenas um "contrato".

    Abraços,
    Caio Proiete



    Caio Proiete Siga-me no Twitter!
    http://www.caioproiete.com
    sábado, 27 de junho de 2009 19:53
    Moderador
  • Ótima resposta, Caio!
    Robson Castilho - MCTS .Net 2.0 Windows/Web Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    sexta-feira, 3 de julho de 2009 23:05
  • Ótima resposta, Caio!
    Robson Castilho - MCTS .Net 2.0 Windows/Web Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]

    Obrigado! :)
    segunda-feira, 6 de julho de 2009 02:59
    Moderador