请看下面的代码:
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
我从以前的开发人员那里看到了很多这样的代码,即一个循环遍历表(例如人、车辆、帐户等)并对数千甚至数百万条记录执行操作的函数。在上述情况下,人员在开始日期六年后被删除。while 循环的每次迭代都有三个操作,即通过 Web 服务发送 id、向人员发送电子邮件以及将日志条目添加到日志文件。在继续开发相关系统时,我正在尝试重构此代码。
我认为 Email、WebService 和 Log 应该有不同的类,而不是在 MassDelete 函数中完成所有工作;工作将在各个班级之间展开,例如电子邮件将从电子邮件班级发送。为循环的每次迭代创建 WebService、Email 和 Log 对象并使用它们的实例变量(在 Person 中循环可能有一百万条记录)是否有任何限制?