Form Objects
• 一つのフォームで複数のAR model を更
新したい場合に有効
• ActiveModel にする
• Form の save の内部で複数の AR model
の save を呼び出す
• 標準の accepts_nested_attributes_for
は @brynary 的には非推奨
• 複雑になったら永続化処理を Service に
18.
Query Objects
• バッチ用or 複雑な条件の SQL を AR の
scope やクラスメソッドにせず Query
Object として分離
• 初期化時に AR::Relation オブジェクトを
渡すようにすると合成可能になる
• TrialQuery.new(Account.where(…)).fin
d_each do ¦e¦ … end
19.
View Objects
• Viewのためのロジックを AR model に
書かない(エラーメッセージ生成など)
• AR model を保持するクラスを定義し
render にはこちらを渡すようにする
• helper に AR model を渡す実装よりも、
リファクタリングが促進される
• 多様な UI に対応する場合にも有効
20.
Policy Objects
• ARmodel を参照はするが主たるドメイ
ンではないロジック(分析のための判定
など)を分離する
• 例:メール配信対象?アクティブユーザ?
• AR model を保持するクラスとして定義
• 他との違い:Policy は read な処理だけ
Service は write も含む、Query は SQL
実行と result set を yield に渡すだけ
今日から出来ること
• 盲目的に ARのクラスメソッドにしない
• AR でないモデルもどんどんつくる
• Controller に AR model 呼び出しをズラ
ズラ書くより Service にする
• 複雑なフォームは Form を導入する
• AR に表示用ロジックを持たず View
Object でラップして表示処理に渡す