目次
Decoratorを使う
draperでいい
https://github.com/drapergem/draper
https://qiita.com/mmaumtjgj/items/50c8ac82ca5583cac254
View用のロジックを切りはなせてModelがすっきりする
ModelだけじゃなくてCollectionもデコレートできるので
rspecもシッカリ書く。
kaminari(ページャ)と併用する場合は設定が必要
https://github.com/drapergem/draper#using-pagination
Interactorを使う
https://qiita.com/verdy89/items/00a2992a9a62cacec00e
https://github.com/collectiveidea/interactor
ServiceObjectみたいなやつ
決まりがあるのでチームで書き方がズレにくい
1つの動きをするInteractorとそれをまとめて実行するOrganizerがあり、共通の機能とか作っておけばOrganizerに書くだけで組み込めて便利
自分はCreate, Update, Deleteで使います
命名は誰が何をするかで統一するとわかりやすい(アクターごとにディレクトリあるほうがいいのかもしれません)
こんなイメージです
# システムが期限ぎれデータを削除
SystemRemoveExpiredDataOrganizer
# ユーザーがデータを作成
UserCreateDataOrganizer
# 管理者がデータを編集
AdminEditDataOrganizer
使いにくかったりめんどい所はあるけどinteractorイイと思ってます
そうするとModelがきれいになる
この方針でいけばModelには以下の記述が残る
・relation
・validation
・read系のクエリとかscopeとか
・ビジネスロジック
readも分離できたほうが気持ちいっすかね?
その辺はまだまだ勉強中です
おわり
え、そんだけ?
すいません思いついたら足します
便利なgem、機能、設計があったら教えてくれよな