2009-06-23 4 views
1

Я интегрирую список рассылки в существующую CMS в asp.net MVC.Отправка электронной почты с подтверждением?

Мне нужно отправить письмо с подтверждением подписчику. Где я должен отправить его, контроллер, или уровень обслуживания?

Уточнение: Я бы определенно создал отдельный метод службы, называемый SendConfirmationEmail(). Вопрос в том, кто называет это контроллером, обрабатывающим регистрационную форму или службу, которая добавила ожидающий запрос в БД?

Очевидно, я могу отправить его из обоих, но который является надлежащим MVC?

ответ

3

Я предполагаю, что стандартный подход состоит в том, чтобы иметь электронную почту, которая вводится в ваш контроллер, и контроллер вызывает только служебную операцию, например _emailService.Enqueue (myMessage).

public class MyController 
{ 
    IEmailService _emailService; 

    public MyController(IEmailService emailService) 
    { 
     _emailService = emailService; 
    } 

    public ActionResult Email() 
    { 
     var myMessage = new MyMessage(); 

     // Initialize message here 

     _emailService.Enqueue(myMessage); 
     return View(); 
    } 
} 

Некоторые из преимуществ являются:

  • повторное использование: если вам нужно использовать функциональные возможности электронной почты в другой контроллер/действие
  • проверяемость: вы можете издеваться службу электронной почты в блоке тестов, поэтому ваши тесты не полагаются на SMTP-сервере
  • вы можете заменить реализацию рассылки и вместо отправки почты напрямую поставить ее в очередь асинхронной отправка
0

MVC поощряет разделения задач так размещение поведения внутри слоев все о решении озабоченности поведения. Поскольку я не знаком с вашей архитектурой, я не знаю, что вы подразумеваете под словом «службы», но поскольку отправка писем имеет мало общего с моделями, представлениями или контроллерами вашего сайта, я бы рекомендовал вам переместить эту функциональность в приложение где он принадлежит.

Если ваш сервисный уровень является, по сути, и прикладным, то я бы поставил там код.