以下のコードを見てください。
Public Sub MassDelete()
Dim objCommand As SqlCommand
Dim objCon As SqlConnection
Dim objDR As SqlDataReader
Try
Dim _ConString As String = "Data Source=IANSCOMPUTER;Initial Catalog=Test5;Integrated Security=True;MultipleActiveResultSets=true"
objCon = New SqlConnection(_ConString)
Using objCon
objCommand = New SqlCommand("SELECT * FROM Person WHERE StartDate <= dateadd(-6,year," & Now & ")")
objCommand.Connection = objCon
Using objCommand
objCon.Open()
objDR = objCommand.ExecuteReader
Do While objDR.Read
'Send ID over web service
'Send email to person
'Add log entry to log file
Loop
objDR.Close()
End Using
End Using
Catch ex As Exception
Throw
Finally
End Try
前の開発者からのこのようなコードがたくさんあります。つまり、人、車両、アカウントなどのテーブルをループし、数千、場合によっては数百万のレコードに対してアクションを実行する 1 つの関数です。上記の場合、開始日から6年後に削除されます。while ループの反復ごとに 3 つのアクションがあります。つまり、Web サービス経由で ID を送信し、個人に電子メールを送信し、ログ エントリをログ ファイルに追加します。問題のシステムの開発を続けながら、このコードをリファクタリングしようとしています。
MassDelete 関数ですべての作業を行うのではなく、Email、WebService、および Log に対して異なるクラスが必要であると考えています。作業はクラス間で分散されます。たとえば、電子メールは Email クラスから送信されます。ループの反復ごとに WebService、Email、および Log のオブジェクトを作成し、それらのインスタンス変数を使用することに制限はありますか?