2011-07-06 54 views
3

我正在构建一个MVC应用程序(使用Zend Framework)。MVC:在哪里触发用户注册电子邮件

当用户第一次注册中应用程序发送一封电子邮件。我的问题是,我应该在哪里触发此电子邮件?模型还是控制器?我的想法如下:

  • 在某些方面,模型是有意义的,因为发送注册电子邮件是我业务逻辑的一部分。用户必须点击邮件中的链接才能验证其电子邮件地址。

  • 但是,把它在模型中,我是“拖累”的模型。模型的注册用户操作仅适用于需要为每次注册发送电子邮件的应用程序。

  • 相反,通过控制器内触发的电子邮件,我的控制器将成为一个垃圾箱“胖”,但我的模型多一点“细粒”。

我写这实际上配置,并发送电子邮件中的电子邮件服务,我认为这是一个很好的设计决策。我真的只是问我应该从哪里调用此服务。

您的想法是非常感谢!

回答

0

你可能要考虑使用像NServiceBus东西要排队的消息被发送到你的电子邮件服务。

这种方式,您可以有NServiceBus订阅该事件发生,并省略电子邮件服务的任何人工烧制等

最终你要确保你的信息得到预期的人的故障保护方式。这种框架将极大地帮助您确保发生这种情况。

或者你可以存储你的数据库中要发送的电子邮件,让您的电子邮件服务检查数据库队列每隔x分钟的新的电子邮件发送和省略需要触发电子邮件发送。

再次,做这种方式将确保在至少该电子邮件被发送。如果在发送每封电子邮件期间网络出现故障或发生其他干扰,您可以将其保留在队列中,直到网络恢复正常。

+0

这不回答。问题即使OP决定使用你的产品,他仍然需要知道何时调用它 –

+0

这是我的观点 - 。他不会需要调用它的总线(无论总线架构,他可能)将共同配置事件发生时会触发的事件,例如用户被插入到数据库中。这省略了手动触发电子邮件的必要。同样在我的第二次消解中,再也没有必要打电话了。该服务将负责查找从数据库发送的电子邮件。他可能需要在这种情况下,是一个自定义事件设置侦听新项目被插入到数据库中,并生成培训相关电子邮件到数据库 –

+0

也许你是一个点超出了我的把握。然而,当你说“巴士...将配置一个事件”时,你似乎正在精确地描述OP引用的内容:时间/事件/动作/无论电子邮件服务应该被激活。如果电子邮件发件人是外部服务或内置在框架中,这并不重要;触发它的任务是一样的。至于你的第二点,外部服务是不必要的开销。 OP没有要求额外的电子邮件相关功能,所以为此配置一个监听器看起来像是矫枉过正。 –

2

Zend Framework's definition of MVC,你应该把从控制器发送电子邮件:

控制器......决定哪些查看基于用户的请求显示。

模型,在另一方面,包含:

...一组抽象的背后基本功能。

电子邮件可被视为“视图”,因为它向用户显示信息。激活这个“视图”是控制器的工作。“

+0

允许我扮演魔鬼的拥护者,但是模型不会一样好吗? $ user = new User(); $用户> sendEmail( “欢迎光临!”);只要指出,这真的是争论,并将取决于程序员的偏好和最终目标。无论你选择什么,只要保持一致。 –

+0

@ brady.vitrano感谢您的意见。正如你所说,偏好当然起着一定的作用,并没有硬性规定。但是,当ZF文档引用“基本功能”时,我认为它指的是诸如添加/删除/更新等过程。如果模型可以发送电子邮件,为什么不输出HTML(视图)呢?作为一个侧面说明,这个问题已经在SO之前解决:http://stackoverflow.com/questions/5017369/mvc-php-sending-mail-from-model和其他地方,没有明确的共识。 –

+0

@brady。你的消化不良违背了清晰的问题分离。用户是用户,他们不应该也负责发送电子邮件。如果有的话,至少应该有一些负责电子邮件发送的东西,而不是像你提出的那样绑定到系统中的其他类型。 –

2

在我看来,我会在模型想这一点,因为我会考虑创建用户方法的这种假定的过程,而不是与用户发出请求任何特定的相互作用。

换句话说,因为我总是希望这封邮件发送,无论请求的来源,我将确定这为创建用户操作的天然副产品,类似于记录被保存在数据库中。

相关问题