自分の知りうる範囲のお話なので、ドメイン層=モデル+サービスくらいのお話で。
正しいかは全くわからないが自分の中で感じてること。
モデルの関連付け(association)
- あるオブジェクトから他のオブジェクト(クラスの同一性は問わない)を呼び出す時に使われるものは極力ここに集約されるべき
- current_user.followingsとか
- 関連先のモデルでのscopeを指定することもできるようだ(例)
- user.recent_followingsとか関連付け先のscope指定で可能。
モデルのスコープ/クラスメソッドでのフィルタリング
- あるクラスのオブジェクトの集合に対して特定の条件を満たす物をフィルタリングするために使う。
- User.recent_signupとか(命名微妙かも)
モデルのメソッド
- あるオブジェクトの自身(の属性?)への操作があった時に使う
- current_user.update_settings()とか
- 他のモデルへの操作はサービスクラスに切り出した方が良いかもしれない(currnet_user.follow(another_user)とかよくないかも)??
- あるオブジェクトの属性を組み合わせて作られる、カスタム属性を呼び出す時に使われる
- user.full_nameとか(
"#{first_name} #{last_name}"
だ)
- user.full_nameとか(
サービスクラス
- あるモデル起点で他のモデルを弄る/操作する時など?に使う
- 中間テーブルの使われる操作とか?
- current_user.follow(another_user)はよくないのかも