プレゼンター(デコレーター)とは?
HTMLコードを生成する役割を担うクラスでRailsコミュニティの中から生まれた概念です。viewではないですが、viewヘルパーを呼び出すことが可能になります。
デコレーターとは?
Gofのデザインパータンの一つです。以下の記事でも解説しています。(サンプルソースはJavaですが。)
プレゼンターとは?
MVCから派生したMVPという概念から生まれた用語のようです。導入するとコントローラーの肥大化の防止や、テスタビリティの向上などを期待できるようです。
プレゼンターのメリット
ERB等のviewから複雑なコード部分を抽出することが可能になります。
プレゼンター機能を提供する主なGem
- Draper
- ActiveDecorator
別に自分で一から実装しても良いですが、上記のようなGemを利用することでコードの記述量を減らすことも可能です。
Draper
明示的にActiveRecordインスタンスのあとに.decoratorを指定する必要がある。
ActiveDecorator
ViewでActiveRecordを取り扱うときに暗黙的にデコレートしたオブジェクトが渡される。
ディレクトリ
下記のディレクトリ配下にファイルを作成します。
1 |
app/presenters |
プレゼンターの種類
適用する部品によってプレゼンターにも様々な種類があります。
- モデルプレゼンター
- フォームプレゼンター
baseクラス
下記のようにbaseとなる共通クラスを作ります。view_contextからviewヘルパー(例えば、raw等の)を呼び出すことが可能になります。
1 2 3 4 5 6 7 |
class ModelPresenter attr_reader :view_context def initialize(object, view_context) @view_context = view_context end end |
継承先クラス
下記のような感じでbaseクラスを継承させてviewで使いたいメソッドを定義します。
1 2 3 4 |
class xxxPresenter < ModelPresenter def メソッド1 end end |
view
view側では下記のように定義します。
1 |
<% p = xxxPresenter.new(self) %> |
self
疑似変数でといい、selfによって参照されるオブジェクトをビューコンテキストと呼びます。このオブジェクトはRailsで定義された全てのヘルパーメソッドを自分のメソッドとして保持しています。
この記事へのコメントはありません。