私の仮定は主観的に聞こえるかもしれませんが、いくつかの調査の結果、処理 (Close/Commit/Rollback)にUsing ステートメントをTry/Catch
使用する代わりに、ダミーを好む開発者を見つけることは珍しくありません。IDbConnection/IDbTransaction
これは、経験豊富な開発者や新しい開発者にも当てはまります。StackOverflow やフォーラムのリンクに関する質問を例として参照するつもりはないので、気分を害することはありません。私が見つけたものから、Usingステートメントは安全に使用できます(しゃれは意図されていません)。
何か問題がありますか?次のコードを検討してください。
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
Assum{CREATE_CONNECTION}
は接続を作成する のプレース ホルダーですSub
。データベース ベンダーによって異なりますが、考えられるすべてのベスト プラクティスに従って記述されており、これ以上の改善は必要ありません。
上記のコードをそのように書き直すことができない理由はありますか:
Using cn As IDbConnection = {CREATE_CONNECTION}
cn.Open()
Using tran As IDbTransaction = cn.BeginTransaction
'run some queries here
tran.Commit()
End Using
End Using
?
明らかに、バージョン #2 の方が何をしているかがより直感的です。しかし、おそらく私はここで重要な何かを見逃していますか? データ アクセス ライブラリのベンダー固有の実装のようなもので、内部で呼び出されTransaction.Commit
たりConnection.Close
、オンになったりしないものはありますか? このアプローチは近い将来廃止されますか、それとも最新のプログラミング パターン/ベスト プラクティスでは十分に明確であるDispose
とは見なされませんか? モノラル/モバイル アプリの開発ツールにキーワードのデバッグ サポートがありませんか?Using
その点を支持または否定するためのあらゆる種類の答えを探しています。できれば、元のドキュメントへの引用があるもの、のようなものDo not use Using with IDbTransaction when ...
です。ブログや個人的な経験へのリンクも問題ありません。