下に行くほど、深度があがる
- 1-1. View Model / View Object 画面やAPIなど、レスポンスに沿った内容をまとめたオブジェクト
- 1-2. Collector Object / Finder Object 1つのテーブル、またはそれに関連するテーブルを取得するオブジェクト
- 1-3. Query Object DBから取得する際に発行するクエリを定義するオブジェクト
-
内容 レスポンスの返却値をまとめたオブジェクト。 RailsのViewに返すオブジェクトであれば、インスタンス変数ごとにメソッドを切って、取得処理をメソッド内で行う。
-
ネームスペース・クラス名
app/view_objects/コントローラー名/アクション名_view_object.rb
app/view_objects/api/v1/コントローラー名/アクション名_view_object.rb
-
内容 リクエストをもとに、単一・複数のデータを取得するオブジェクト
-
ネームスペース・クラス名
- 返却値が単一のレコード
app/models/adminとかmodel名とか/内容_finder.rb
- 返却値が複数のレコード(ActiveRecord_Relation)
app/models/adminとかmodel名とか/内容_collector.rb
- 返却値が単一のレコード
Collectorから絞り込み/ソートを切り出している場合は
絞り込み: app/models/adminとかmodel名とか/内容_collector/filtering.rb
ソート: app/models/adminとかmodel名とか/内容_collector/ordering.rb
-
内容 複雑なクエリ部分を切り出したオブジェクト
-
ネームスペース・クラス名
app/models/model名/内容_query.rb
(app/models/内容_query.rb
はNG)
下に行くほど、深度があがる
- 2-1. Service Object 手続きの流れ(DB更新を含む複数の処理)を切り出したオブジェクト
- 2-2. Creator / Updater Object validation、保存する内容のビルド、保存を行うオブジェクト
- 2-3. Form Object validation、保存する内容のビルドを行うオブジェクト 2-2. Creator / Updater Objectと違い、保存自体は行わない
- 2-4. Validate Object validationを行うオブジェクト
-
内容 ある手続きの流れを切り出したクラス。
-
ネームスペース・クラス名
app/models/内容_service.rb
app/models/adminとかmodel名とか/内容_service.rb
-
内容 リクエストに対するvalidationや、オブジェクトのビルドをしたあと、保存まで提供するオブジェクト (saveメソッドをクラス内に用意している)
-
ネームスペース・クラス名
app/models/adminとかmodel名とか/内容_creator.rb
app/models/adminとかmodel名とか/内容_updater.rb
-
内容 リクエストに対するvalidationや、保存する内容のビルドをするオブジェクト (saveメソッドをクラス内に用意していない)
-
ネームスペース・クラス名
app/models/adminとかapiとか/クラス名_form.rb
-
内容 カスタムバリデーターの定義。Railsが用意している
ActiveModel::Validator
を継承したクラスをapp/validators
配下に定義する。 -
ネームスペース・クラス名
- 複数クラスで使用する共通バリデーション(メアドチェックなど)
app/validators/内容_validator.rb
- 1つのクラスでのみ使用するバリデーション
app/validators/model名(単数)/内容_validator.rb
- 複数クラスで使用する共通バリデーション(メアドチェックなど)
-
内容 あるオブジェクトから、何らかのデータを返却したい際に、その算出ロジックを切り出したオブジェクト。 参考: https://techracho.bpsinc.jp/hachi8833/2018_03_27/53794
-
ネームスペース・クラス名
app/models/何か階層入れる/クラス名やカラム名など(ケースbyケース)
-
内容 あるオブジェクトの分岐部分を切り出したオブジェクト userクラスに対して権限が3つ以上ある時とかに使いたい。 参考: https://techracho.bpsinc.jp/hachi8833/2018_03_23/53523
-
ネームスペース・クラス名
app/models/model名(単数)/内容_policy.rb