Bezpieczne w użyciu dla IDbConnection / IDbTransaction?
Chociaż moje przypuszczenie może wydawać się subiektywne, po kilku badaniach odkryłem, że nie jest niczym niezwykłym znalezienie programistów, którzy faworyzują manekinaTry/Catch
zamiast używaćUżywanie instrukcji dlaIDbConnection/IDbTransaction
przetwarzanie (Close / Commit / Rollback).
Dotyczy to nawet niektórych doświadczonych programistów i kilku nowych. Przykładowo nie zamierzam odwoływać się do żadnego z pytań na temat StackOverflow lub linków na forum, więc ludzie się nie obrażają. ZCo znalazłem, Za pomocą oświadczenie jestbezpieczny w użyciu (gra słów nie przeznaczona).
Czy jest w tym coś złego? Rozważ następujący kod:
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
Założyć{CREATE_CONNECTION}
to miejsce na aSub
który tworzy połączenie, w zależności od dostawcy bazy danych, napisane zgodnie ze wszystkimi możliwymi najlepszymi praktykami i nie wymaga większej poprawy.
Czy istnieje powód, dla którego powyższego kodu nie można przepisać jako takiego:
Using cn As IDbConnection = {CREATE_CONNECTION}
cn.Open()
Using tran As IDbTransaction = cn.BeginTransaction
'run some queries here
tran.Commit()
End Using
End Using
?
Oczywiście wersja 2 jest bardziej intuicyjna w tym, co robi. Ale może brakuje mi tutaj czegoś ważnego? Rzeczy takie jak implementacje bibliotek dostępu do danych specyficzne dla dostawcy, które nie wywołująTransaction.Commit
i / lubConnection.Close
naDispose
wewnętrznie? Czy to podejście zostanie wycofane z użytku w najbliższej przyszłości, czy też nie będzie uważane za takiewystarczająco jasne w nowoczesnym wzorcu programowania / najlepszych praktykach? Narzędzia do obsługi aplikacji Mono / Mobile bez obsługi debugowaniaUsing
słowo kluczowe?
Szukam jakiejkolwiek odpowiedzi, aby poprzeć lub zaprzeczyć. Najlepiej ten z cytatami do oryginalnej dokumentacji, coś w tym styluDo not use Using with IDbTransaction when ...
. Linki do blogów lub osobistych doświadczeń są również w porządku.