我应该在哪里发送确认电子邮件?
问题描述:
我正在将一个邮件列表集成到asp.net MVC中的现有CMS中。我应该在哪里发送确认电子邮件?
我需要向订阅者发送确认电子邮件。我应该在哪里发送它,控制器或服务层?
澄清:我肯定会创建一个名为SendConfirmationEmail()的单独服务方法。问题是谁将其称为处理注册表单的控制器或将未决请求添加到数据库的服务?
显然我可以从两者发送它,但这是适当的MVC?
答
我猜标准的做法是有一个电子邮件服务注入到您的控制器和控制器只调用服务操作,如_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服务器上
- 您可以替换邮件实现,而不是直接发送邮件队列它为异步发送
答
MVC鼓励层内的分离的担忧这样的行为放置所有关于解决行为关注。由于我不熟悉你的架构,我不知道你的意思是什么“服务层”,但由于发送电子邮件与你的网站的模型,视图或控制器无关,所以我鼓励你将这个功能转移到应用程序中它属于哪一层。
如果你的服务层实际上是应用层,那么我会把代码放在那里。