Usando para IDbConnection / IDbTransaction seguro de usar?
Embora minha suposição possa parecer subjetiva, depois de algumas pesquisas, descobri que não é incomum encontrar desenvolvedores que preferem um bonecoTry/Catch
em vez de usar oUsando declaração paraIDbConnection/IDbTransaction
processamento (Close / Commit / Rollback).
Isso vale para alguns dos desenvolvedores mais experientes e alguns novos. Eu não vou referenciar a pergunta no StackOverflow ou links de fórum como exemplo, então as pessoas não ficam ofendidas. Deo que eu encontrei, Usando declaração éseguro usar (sem trocadilhos)
Há algo de errado com isso? Considere o seguinte código:
Public Sub Commit()
Dim cn As IDbConnection = {CREATE_CONNECTION}
Dim tran As IDbTransaction = Nothing
cn.Open()
Try
tran = cn.BeginTransaction
'run some queries here
tran.Commit()
Catch ex As Exception
If Not tran Is Nothing Then tran.Rollback()
Throw
Finally
cn.Close()
End Try
End Function
Assumir{CREATE_CONNECTION}
é o espaço reservado para umSub
Isso cria uma conexão, dependendo do fornecedor do banco de dados, escrito de acordo com todas as possíveis práticas recomendadas e não precisa de mais melhorias.
Existe uma razão pela qual o código acima não pode ser reescrito como tal:
Using cn As IDbConnection = {CREATE_CONNECTION}
cn.Open()
Using tran As IDbTransaction = cn.BeginTransaction
'run some queries here
tran.Commit()
End Using
End Using
?
Claramente, a versão # 2 é mais intuitiva para o que está fazendo. Mas talvez eu esteja perdendo algo importante aqui? Coisas como implementações específicas de fornecedor de bibliotecas de acesso a dados, que não chamamTransaction.Commit
e / ouConnection.Close
emDispose
internamente? Esta abordagem está sendo desativada em um futuro próximo, ou não é considerada comoclaro o suficiente no padrão de programação moderna / melhores práticas? Ferramentas de desenvolvimento de aplicativos mono / móveis sem suporte a depuração paraUsing
palavra-chave?
Estou à procura de qualquer tipo de resposta para apoiar ou negar o ponto. De preferência aquele com aspas para a documentação original, algo comoDo not use Using with IDbTransaction when ...
. Links para blogs ou experiência pessoal também são bons.