質問: モデルにビジネスロジックを記述して、コントローラでそれを呼び出して使う設計をDDDというと思うのですが(そんな感じで解釈しています)、どのモデルにどのビジネスロジックを記述するべきなのかわからなくなりました。 --- 1 例えばブログシステムを考えた時、PostとCommentというモデルがあって、コメントを投稿、取得するロジックはどちらのモデルに記述するべきなのでしょうか?コメントを操作するのでCommentモデルかと思いましたが、Postモデルに記述しているコードもありました。これに限ったことではありませんが、どういう考えで、どういう設計にしているのか皆さんの意見が聞きたいです。 --- 2 Model fatという言葉がるように、モデルが大きくなり過ぎて、記述する場所をもっと細分化したほうが良いなど聞いたことがあります。 このような状態になる前に、できるだけ細分化する設計をした方が良いのでしょうか?(serviceディレクトリを作り、処理によりファイルを分けるなど) ご回答宜しくお願いします。
回答: まぁこの辺の話は結局好みなので正解はなく宗教論争になりがちな気もしますが。。。 > > 1 コメントを投稿、取得するロジックはどちらのモデルのモデルに記述するべきなのでしょうか? > > > コメントをDBに登録、取得するロジックはモデルですね。 単に comment.save や comment.where はコントローラに書きますが、複雑な場合はモデルに書きます 例えば未読コメントを取得する場合は Comment に #unread みたいなメソッドを定義してそれをコントローラから呼びます。 > > 2 このような状態になる前に、できるだけ細分化する設計をした方が良いのでしょうか? > > > そうした方が今風ではあると思います。