Сценарий:
Я занимаюсь разработкой веб-приложения.В моем приложении пользователи запрашивают услугу написания статьи у копирайтеров.Затем копирайтеры приступят к созданию и отправят статью обратно клиенту.Затем клиент может одобрить или отклонить статьи.Все эти действия имеют статус.
Бизнес-проблема:
01. Мне нужно (пример действий приведен ниже)02.Отправлять уведомления (электронные письма), когда статус статьи изменился.03. Обновите профили копирайтера в зависимости от их эффективности (например, отклонение или одобрение) в базе данных.04. Уведомить администратора приложения, если определенная статья была отклонена x раз.05. В будущем может появиться больше бизнес-логики.В основном весь поток - это либо отправка электронной почты, либо вызовы из базы данных.
Мой подход:
Я разработал одну функцию на своем среднем уровне (да, мое приложение - 3 уровня.)*
Public Sub ExecuteWorkFlow(ByVal requestid As Integer, ByVal oldStatus As ServiceStatus, ByVal newStatus As ServiceStatus)
Try
If oldStatus.Value = ServiceStatus.InProgress Then
If newStatus = ServiceStatus.PendingReview Then
'Update Logic
ElseIf newStatus = ServiceStatus.Completed Then
'Update Logic
End If
End If
'Check for rejected work flow. Send email to copywriters (and us if 3 rejection)
If newStatus = ServiceStatus.Rejected Then
If oldStatus.Value = ServiceStatus.PendingReview Then
'send email
SendRejectServieRequestEmail()
Dim rejects = From r In request.ServiceRequestHistory Where r.NewStatus = ServiceStatus.Rejected Select r
If rejects.Count() >= 3 Then 'Send email to admin
'send email
SendRejectServieEmailToAdmin()
End If
End If
End If
End If
'Check for new job workflow. Send emails to providers.
If oldStatus.HasValue = True Then
If oldStatus.Value = ServiceStatus.UserEditing Then
'Get all copywriters
For Each p In copywriters
'Send email
Next
End If
End If
End If
Catch ex As Exception
End Try
End Sub
Это дает следующие преимущества:
Внутренняя логика может быть изменена с меньшими усилиями.Весь поток управляется в одном месте.
Но:
Это последовательно.И отправка электронной почты в цикле for займет значительное время.Но он слишком велик для того, чтобы закончить с постом asp.net.Я использую SmtpClient в качестве почтового инструмента.Но отправка асинхронных не поддерживается на среднем уровне.
Ожидаемое решение
Есть ли способ отправить асинхронную электронную почту с asp.net, кроме страницы (со среднего уровня)?Есть ли какой-либо другой лучший подход к рабочему процессу для веб-решения?
У меня нет ответов на C # или vb.net.Я использую .net 4.0
Дополнительные комментарии
Мне нужно обновить базу данных относительно этого статуса.Не только отправка писем.