【发布时间】:2009-06-24 00:18:04
【问题描述】:
我正在将邮件列表集成到 asp.net MVC 中的现有 CMS 中。
我需要向订阅者发送一封确认电子邮件。我应该从哪里发送它,控制器还是服务层?
澄清:我肯定会创建一个单独的服务方法,称为 SendConfirmationEmail()。问题是谁称它为处理注册表单的控制器或将待处理请求添加到数据库的服务?
显然我可以从两者发送它,但哪个是正确的 MVC?
【问题讨论】:
标签: c# asp.net-mvc
我正在将邮件列表集成到 asp.net MVC 中的现有 CMS 中。
我需要向订阅者发送一封确认电子邮件。我应该从哪里发送它,控制器还是服务层?
澄清:我肯定会创建一个单独的服务方法,称为 SendConfirmationEmail()。问题是谁称它为处理注册表单的控制器或将待处理请求添加到数据库的服务?
显然我可以从两者发送它,但哪个是正确的 MVC?
【问题讨论】:
标签: c# asp.net-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();
}
}
其中一些好处是:
【讨论】:
MVC 鼓励关注点分离,因此将行为放置在层内都是为了解决行为的关注点。由于我不熟悉您的体系结构,我不知道您所说的“服务层”是什么意思,但是由于发送电子邮件与您网站的模型、视图或控制器几乎没有关系,我鼓励您将此功能移动到应用程序中所属的层。
如果您的服务层实际上是应用层,那么我会将代码放在那里。
【讨论】: