我听说过一些关于 Web 应用程序中 MVC 结构的观点。有些人认为模型应该非常小,并且只包含 ActiveRecord(或其他一些 ORM)和像validates
andbelongs_to
这样的小东西,所以模型只有几行长。
我个人认为模型可以在应用程序中发挥更大的作用。例如,我需要在整个应用程序中频繁通知用户。通知可以从多个控制器触发。它们都根据用户的通知设置向用户发送通知,这是可通过用户模型访问的对象。
我想做类似的东西:
class User < ActiveRecord::Base
#validations, relationships, etc
def notify(event)
notif = Notification.new
notif.type = event.type
notif.to = self.id
# etc
if notif.save
# send the notification based on the settings
end
end
end
这将使任何控制器都可以@user.notify
用来向用户传递消息。这让事情变得非常干净,但我意识到我的模型中有一些逻辑。更不用说该模型制造了另一个模型。
我不介意的另一种方法是创建通知并通过该对象发送它。所以控制器可以做Notification.new(:to => @user.id, ...)
,然后通过Notification.send
. 这也会在 Notification 对象中添加一些逻辑,以便它知道如何发送自己。事实上,我可能更喜欢这种方法,而不是通过 User 模型创建通知对象。
我不介意模型中的这些小逻辑,以便在从多个控制器发送消息时方便。这是最好的方法吗?我想一个更纯粹的方法是在每个发送通知的控制器中包含一个 NotificationHelper 模块?
编辑:我一直在阅读一些关于模型中的“域逻辑”的内容。似乎鼓励这样做,我认为notify
orsend
方法被认为是域逻辑。任何有 MVC 经验的开发人员都可以对此发表评论吗?