【问题标题】:Sending email updates: model or observer?发送电子邮件更新:模型还是观察者?
【发布时间】:2009-11-10 13:27:28
【问题描述】:
我有一个Event 模型,它为每个用户存储一个事件源。我还需要将更新通过电子邮件发送给已在其个人资料中启用电子邮件通知的用户。
从架构的角度来看,哪个更好?
- 在 model 的
after_create 方法中调用邮件程序,因为它是业务逻辑的一部分;
- 在 observer 的
after_create 方法中调用邮件程序,因为它并不真正对模型进行操作,而且还取决于用户的设置。
【问题讨论】:
标签:
ruby-on-rails
activerecord
【解决方案1】:
我会和观察员一起去。我这样做的原因是发送通知电子邮件不是事件业务逻辑的重要部分(简单地说,事件不发送通知)。除此之外,正如 Damien 已经说过的,这是一个关注点分离的问题。
请参阅here 的讨论。
【解决方案2】:
没有“神奇”的答案,因为它是主观的。
一些开发人员更喜欢直接在模型中执行此操作。其他人会在观察者中进行。
你做什么完全取决于你。两种解决方案都有效。
我个人更喜欢将它们添加到观察者中,因为它允许我将所有用户通知放在同一个地方,而不是一个模型中的一个,另一个模型中的另一个。
【解决方案3】:
观察者方法将更加灵活。如果您的电子邮件设置(收件人或服务器)或通知标准(每天到每周,反之亦然)发生变化,则更改观察者比修改模型更简单。