一般与模特特定的观察员和邮寄者?

时间:2012-07-17 06:23:29

标签: ruby-on-rails ruby activerecord actionmailer

在创建邮件程序和/或观察者时,您是根据模型还是根据他们的任务来组织邮件?

基于模型

PictureMailer
PictureObserver
EventMailer
EventObserver
UserMailer
UserObserver

或基于任务

AdminMailer (Mails to be sent to admins)
AdminObserver 
NotificationMailer
NotificationObserver

1 个答案:

答案 0 :(得分:1)

我根据他们的任务组织他们。我更喜欢在更少,更大,更粗粒度的邮件上使用更多,小巧,细粒度的邮件。例如,我可能没有AdminMailer,但是在管理员中发生了不同的事情的几个不同的邮件程序。通知也是如此 - 您可能有多个发送通知的用例,因此每个用户都有一个邮件程序。通常,人们可以将其视为每个功能的邮件程序。

至于观察员,这取决于他们的任务。如果我正在监控创建和修改用户的分析,我可能只有一个UserObserver。一旦我需要第二个用户观察者,我就会将其重命名为UserAnalyticsObserver。看一下当前的项目,我有四个观察者,其中只有一个是以模型命名的 - 大多数都以该特征命名。

我的理由是遵循单一责任原则,这实际上意味着一个班级应该有一个改变的理由。如果我在模型之后使用命名邮件程序/观察者,我最终会得到支持多个功能的类,因此有多种原因需要更改。