ApplicationMailer 约定 - 在邮件程序中传递数据与查找
ApplicationMailer convention - passing data vs. lookup in the mailer
我注意到 ApplicationMailers 接受的约定是将内部逻辑保持在最低限度,并将所需数据传递到邮件程序本身,而不是在邮件程序内部查找数据(ActiveRecord 记录)。我还没有真正找到解释 为什么 这是首选 - 谁能解释为什么这是趋势?
例如:
class FooMailer < ApplicationMailer
# OK
def foo_email(recipient, widget)
@widget = widget
mail(to: recipient, from: 'foo@bar.com', subject: 'Your widget')
end
######
# VS #
######
# Not OK
def foo_email(recipient)
@widget = Widget.first
mail(to: recipient, from: 'foo@bar.com', subject: 'Your widget')
end
end
谢谢!
一个字(好吧,三个):Single responsibility principle。
在前面的示例中,ApplicationMailer
不需要了解您的模型的任何信息。而且,它不包含与选择 widget
相关的任何业务逻辑。
在后一个示例中,ActionMailer
(1) 需要了解您的模型(有一个叫做 Widget
的东西)和 (2) 包含业务逻辑(Widget.first
).
我注意到 ApplicationMailers 接受的约定是将内部逻辑保持在最低限度,并将所需数据传递到邮件程序本身,而不是在邮件程序内部查找数据(ActiveRecord 记录)。我还没有真正找到解释 为什么 这是首选 - 谁能解释为什么这是趋势?
例如:
class FooMailer < ApplicationMailer
# OK
def foo_email(recipient, widget)
@widget = widget
mail(to: recipient, from: 'foo@bar.com', subject: 'Your widget')
end
######
# VS #
######
# Not OK
def foo_email(recipient)
@widget = Widget.first
mail(to: recipient, from: 'foo@bar.com', subject: 'Your widget')
end
end
谢谢!
一个字(好吧,三个):Single responsibility principle。
在前面的示例中,ApplicationMailer
不需要了解您的模型的任何信息。而且,它不包含与选择 widget
相关的任何业务逻辑。
在后一个示例中,ActionMailer
(1) 需要了解您的模型(有一个叫做 Widget
的东西)和 (2) 包含业务逻辑(Widget.first
).