Пожалуйста, обратите внимание на код ниже:VB.NET - Создание объектов на каждом цикле
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 существует три действия: отправьте идентификатор по веб-службе, отправьте электронное письмо человеку и добавьте запись журнала в файл журнала. Я пытаюсь реорганизовать этот код, поскольку я продолжаю разработку рассматриваемой системы.
Я считаю, что должны быть разные классы для Email, WebService и Log и вместо выполнения всей работы в функции MassDelete; работа будет распространена среди классов, например. письмо будет отправлено из класса электронной почты. Существуют ли какие-либо ограничения на создание объектов для WebService, Email и Log для каждой итерации цикла и использования их переменных экземпляра (в Person может быть миллион записей)?
FWIW: используйте ['Using'] (http://msdn.microsoft.com/en-us/library/htd05whh.aspx). Одна из причин держать его отправленным из одного места (даже если «код отправки» находится в другом классе) заключается в том, что транзакция * может использоваться *. И нет, создание объекта дешево. Однако действительно ли нужно, чтобы объект «отправить электронную почту» * был новым экземпляром или он просто предоставлял такую услугу, как «SendEmail (адрес, тема, сообщение)»? В этом случае было бы бессмысленно сделать его классом «EmailBoundToAnAddress». Теперь код WebService/Logging * * привязан к чему-то, но не тот, который меняет каждый цикл. – 2013-03-28 22:01:56
Спасибо. Я обновил вопрос с помощью операторов. Я не понимаю оставшуюся часть вашего последнего комментария. Не могли бы вы пояснить или опубликовать ответ? – w0051977
Какая часть? (Я обычный редактор.) – 2013-03-28 22:07:11