Php 执行';电子邮件';类属于模型还是视图?

Php 执行';电子邮件';类属于模型还是视图?,php,model-view-controller,design-patterns,email,Php,Model View Controller,Design Patterns,Email,我在模型中有一个用户类,需要发送一封密码提醒电子邮件 控制器是否实例化用户,并将其(或其值)传递给视图中的电子邮件类?在这种情况下,控制器会实际发送电子邮件吗 或者,控制器是否会调用User::sendmail()甚至没有电子邮件的视图(并且用户执行发送) 或者是否有另一个处理发送的电子邮件模型类,并将其提供给查看电子邮件 还是我完全迷路了?;-) 谢谢你能给我的任何帮助 除非您正在构建一个消息传递系统,否则电子邮件更愿意成为一种资源,而不是核心领域的一部分。您可以将它们视为任何其他类型的资

我在模型中有一个
用户
类,需要发送一封密码提醒电子邮件

  • 控制器是否实例化
    用户
    ,并将其(或其值)传递给视图中的
    电子邮件
    类?在这种情况下,控制器会实际发送电子邮件吗
  • 或者,控制器是否会调用
    User::sendmail()
    甚至没有电子邮件的视图(并且
    用户执行发送)
  • 或者是否有另一个处理发送的
    电子邮件
    模型类,并将其提供给查看
    电子邮件
还是我完全迷路了?;-)


谢谢你能给我的任何帮助

除非您正在构建一个消息传递系统,否则电子邮件更愿意成为一种资源,而不是核心领域的一部分。您可以将它们视为任何其他类型的资源,如数据库访问、日志记录等

就我个人而言,我将其抽象为一种信息服务,以避免与电子邮件的紧密耦合——这将允许您在将来通过其他渠道发送消息,如果相关的话。控制器需要注入MessagingService并发送消息


涉及用户对象的唯一原因是,如果您需要用户提供的值来填充电子邮件的内容,但这基本上只是一种数据转换。

如果您真的想将内容分解为MVC…基于Mark Seemann所说的内容

MessageController->发送消息/电子邮件 MessageModel->存储消息/电子邮件的信息 不需要查看

我只是将用户信息直接传递给MessageModel。没有理由将MessageModel直接传递给用户对象。

我想说:

  • 控制器做一些事情

  • 视图显示内容

  • 它应该放在控制器里


  • 编辑:正如milesmeow所说,为消息传递创建一个控制器以允许扩展是有意义的。也许你将来会希望能够通过Twitter、IM、SMS或其他媒介发送通知。构建未来是值得的。

    在我看来,电子邮件应该属于框架的显示层,在MVC概念中就是视图。毕竟,电子邮件只是请求输出的另一个显示选项

    不应使用模型或控制器来创建或显示输出。这就是使用MVC这样的设计模式的全部意义


    编辑以澄清;控制器将触发“输出”的发送,视图将使用从模型收集的数据合成并发送“输出”——无论是电子邮件、HTML还是该特定视图设计的其他形式;视图显示内容。如果不是一种可选的输出方法,那么电子邮件是什么?控制器和模型不应负责合成或发送输出。控制器和模型不应负责合成或发送输出。电子邮件只是一种可选的输出方法。我就是这样做的。控制器创建一条消息(它是一个视图),将其添加到Messenger(它是一个外部库类,但在必要时将是一个控制器),然后在Messenger上调用send()。因此,控制器中没有显示逻辑,视图中没有动作逻辑;对的除了控制器将其部分数据提供给消息之外,模型不会进入其中。这就是你的意思吗?是的,听起来不错。尽管如此,MVC概念允许视图直接与模型交互,而不是通过控制器。通过让控制器充当视图和模型之间的中介,您可以将其转变为更像传统的第3层体系结构。(参见维基百科文章中的图表;
    http://en.wikipedia.org/wiki/Model-view-controller