draper vs active_decorator

active_decorator はよく使ってるけど draper は README 読んだだけの状態で比較しています。

active_decorator

メリット

  • 実装が比較的シンプル
  • 使い方もシンプル
  • 自動的に model を decorate してくれる

デメリット

  • decorator のメソッドを生やす条件が限られている
    • controller 中にインスタンス変数として定義する
    • partial template の引数として渡す
  • なので、インスタンス変数の関連オブジェクトに対して decorater を適用するのが場合によっては面倒

draper

メリット

  • 関連オブジェクトへの対応がある
  • 複数の decorater を使い分けたり、decorater に変数を渡して挙動を変更したりできる
  • collection に対しても decorator を設定できる

デメリット

  • 基本的に、毎回明示的に decorate するためのメソッドを書く必要がある
  • active_decorator と比較して覚えることが多い

どっちを使ったらいいか

ケースバイケース。draper の方が利用できるシーン自体は多そうだけど、学習コスト高めですね( ˘ω˘)"