10

私の仮定は主観的に聞こえるかもしれませんが、いくつかの調査の結果、処理 (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 ...です。ブログや個人的な経験へのリンクも問題ありません。

4

2 に答える 2