【问题标题】:Where should I send the confirmation email from?我应该从哪里发送确认电子邮件?
【发布时间】:2009-06-24 00:18:04
【问题描述】:

我正在将邮件列表集成到 asp.net MVC 中的现有 CMS 中。

我需要向订阅者发送一封确认电子邮件。我应该从哪里发送它,控制器还是服务层?

澄清:我肯定会创建一个单独的服务方法,称为 SendConfirmationEmail()。问题是谁称它为处理注册表单的控制器或将待处理请求添加到数据库的服务?

显然我可以从两者发送它,但哪个是正确的 MVC?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    我想标准的方法是将电子邮件服务注入到您的控制器中,并且控制器只调用像 _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();
        }
    }
    

    其中一些好处是:

    • reuse : 如果你需要使用 另一个中的电子邮件功能 控制器/动作
    • 可测试性:您可以在 单元测试,所以你的测试不依赖 在 SMTP 服务器上
    • 您可以替换邮件实现,而不是直接发送邮件,将其排队以进行异步发送

    【讨论】:

      【解决方案2】:

      MVC 鼓励关注点分离,因此将行为放置在层内都是为了解决行为的关注点。由于我不熟悉您的体系结构,我不知道您所说的“服务层”是什么意思,但是由于发送电子邮件与您网站的模型、视图或控制器几乎没有关系,我鼓励您将此功能移动到应用程序中所属的层。

      如果您的服务层实际上是应用层,那么我会将代码放在那里。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-05
        • 2016-09-22
        • 2012-11-19
        • 1970-01-01
        • 2014-09-09
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        相关资源
        最近更新 更多