WebアプリケーションのMVC構造に関するいくつかの見解を聞いたことがあります。validates
一部の人々は、モデルは非常に小さく、ActiveRecord(または他のORM)とandのような小さなものだけを含むべきだと信じているbelongs_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
、ユーザーにメッセージを配信するために使用できるようになります。これで物事は本当にきれいになりますが、私のモデルにはいくつかのロジックがあることに気づきました。言うまでもなく、モデルは別のモデルを作成します。
私が気にしないもう1つのアプローチは、通知を作成し、そのオブジェクトを介して送信することです。したがって、コントローラはNotification.new(:to => @user.id, ...)
、を介してメッセージを実行して配信できますNotification.send
。これにより、Notificationオブジェクトにロジックが組み込まれるため、自身を送信する方法がわかります。実際、Userモデルを使用して通知オブジェクトを作成するよりも、このアプローチの方が好きかもしれません。
複数のコントローラーからメッセージを送信するときに便利にするために、モデル内のこれらの小さなロジックを気にしません。これはそれについて行くための最良の方法ですか?より純粋な方法は、通知を送信する各コントローラーにNotificationHelperモジュールを含めることだと思いますか?
編集:私はモデルの「ドメインロジック」について少し読んでいます。これは奨励されているようで、notify
orsend
メソッドはドメインロジックと見なされていると思います。MVCの経験がある開発者はこれについてコメントできますか?