“电子邮件”类属于模型或视图吗?

时间:2009-11-30 04:33:03

标签: php model-view-controller design-patterns email

我在模型中有一个User课程,需要发送密码提醒电子邮件。

  • 控制器是否实例化User并将其(或其中的值)传递给视图中的Email类?在这种情况下,控制器是否会实际发送电子邮件?
  • 或者控制器是否会调用User::sendEmail(),甚至 还没有电子邮件的视图(User发送电子邮件)?
  • 或是否有Email处理发送的另一个模型类,而 it 是否会提供给视图Email

还是我完全失去了? ; - )

感谢你们给我的任何帮助!

4 个答案:

答案 0 :(得分:4)

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

就个人而言,我将其作为MessagingService进行抽象,以避免过于紧密地与电子邮件耦合 - 这将允许您在将来发送其他渠道的邮件(如果相关)。控制器需要注入MessagingService并发送消息。

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

答案 1 :(得分:1)

如果你真的想把事情分解成MVC ......建立Mark Seemann所说的话。

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

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

答案 2 :(得分:0)

我会说:

  1. 控制器做东西

  2. 视图显示内容

  3. 它应该进入控制器

  4. 编辑:正如里程所说,创建一个允许扩展的消息传递控制器是有意义的。也许您希望将来可以通过Twitter,IM,SMS或其他媒体发送通知。建设未来是值得的。

答案 3 :(得分:0)

正如我所看到的,电子邮件将属于框架的显示层,在MVC概念的情况下是View。毕竟,电子邮件只是请求输出的另一个显示选项。

不应使用模型和控制器来创建或显示输出。这是使用像MVC这样的设计模式的重点。

修改澄清; Controller将使用从模型中收集的数据触发发送'输出',View将根据电子邮件,HTML或其他特定View设计的内容进行编写和发送。