Railsに限らないトピックも含まれそう
- モデルとビューのどちらに実装しようか迷うときは、Decoratorパターンを検討する
- モデルの共通化
- Mix-inを使う場合は、
ActiveSupport::Concern
を利用する - STI(単一テーブル継承)
- 継承を利用して、似たようなActiveRecordモデルクラスの共通化を図る
- 継承関係にある一連のモデルクラスはすべて1つのテーブルに対応付けられる
- 各クラスのインスタンスに対応するレコードは、すべて同一のテーブルに格納される
- 対応するテーブルには
type
というカラムを用意する必要がある- 各レコードが所属するクラス名が格納される
- https://guides.rubyonrails.org/association_basics.html#single-table-inheritance
- Mix-inを使う場合は、
- コントローラの共通化にMix-inを使う場合は、モジュールを
app/controllers/concerns
に配置する - ビューで使うユーティリティメソッドはカスタムヘルパーとして
app/helpers
に書く- 全てのビューから呼べるので、「小さく作る」「具体的に命名する」点に気をつける
- コントローラとビューの間で共通的に利用したい処理は、コントローラにメソッドを定義し、それをコントローラで
helper_method
に指定することもできる - 特定のモデルに関する処理を書かないように注意し、そのような場合はモデルやDecoratorに寄せることを検討する
- (複数のモデルが絡むような)特定の処理は専用のオブジェクトを作成する
- サービスオブジェクト(サービスクラス)と呼ばれる設計パターン
- 特定の処理一つのみに専念し、小さく作るようにする
- モデルに書くべき処理をサービスに書かないように気をつける