Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サービスクラス、その前に

 サービスクラス、その前に

Rails Developer Meetup2018 Day2のスポンサーセッション時のスライドです。

https://techplay.jp/event/655769

Yasutomo Uemori

March 25, 2018
Tweet

More Decks by Yasutomo Uemori

Other Decks in Programming

Transcript

  1. ドメインサー ビス Rails で多く語られてきた「 サー ビスクラス」( に近いもの) ビジネスロジックを表現するための一つの手段 Rails の文脈ではだいたい複数のモデルにまたがる処理を責務として

    持つクラス どのドメインモデルにも紐付かないビジネスロジックを表現するた めのもの 例えば キャラクター 作成時には初期武器と初期ジョブを付与する ログイン時にギフトのマスタ情報を参照して受け取ってないギ フトをキャラクター に付与する
  2. ドメインサー ビス Rails で多く語られてきた「 サー ビスクラス」( に近いもの) ビジネスロジックを表現するための一つの手段 Rails の文脈ではだいたい複数のモデルにまたがる処理を責務として

    持つクラス どのドメインモデルにも紐付かないビジネスロジックを表現するた めのもの 例えば キャラクター 作成時には初期武器と初期ジョブを付与する ログイン時にギフトのマスタ情報を参照して受け取ってないギ フトをキャラクター に付与する
  3. MVC とは何だったのか? 参考: あの日見たM V Whatever のModel を僕たちはまだ知らない View: ユー

    ザへのプレゼンテー ション Controller: Model とView をつなぐもの Model: View とController 以外の全て そもそもMVC はプレゼンテー ションとモデルを分割するためのもの。
  4. Rails はMVC フレー ムワー クである Model の設計方針はエンジニアの手に委ねられている 当然の話として、 アプリケー ションの振る舞いはアプリケー

    ション によって違う 例えば、WebAPI とWeb アプリケー ションの設計は同じように はいかない ただしRails には A c t i v e R e c o r d という強力なModel の指針がある Rails Guide 曰く、 A c t i v e R e c o r d とは、M V C で言うところのM 、 つまりモ デルに相当するもの Rails の出発点は M o d e l = A c t i v e R e c o r d
  5. しかしRails ならではのつらみ 時代がたち、 出発点がActiveRecord であることから来るつらみが溢 れてきた PoEAA やDDD で紹介されているようなActiveRecord 以外のModel

    の設計パター ンが非常に取りづらい( 相性が悪い) Rails ならではのアプロー チを模索していく必要がある
  6. ここ数年のRails エンジニアのModel との戦いは、 A c t i v e R

    e c o r d = M o d e l という固定概念からいかに脱却するかの戦い
  7. エトセトラ Service クラスが銀の弾丸ではないし、 今まで語られてきたパター ンだけ がModel の設計パター ンではない R e

    p o s i t o r y ( Q u e r y ) 複数のAR からデー タを1 つのオブジェクト、 あるいはそのコレクションにマッピングする P o l i c y banken gem。 ユー ザの権限をオブジェクト化する S e r i a l i z e r active_record_serializers gem。json などのデー タ形 式にキャストする V a l u e O b j e c t 値そのものをオブジェクト化したもの。 Immutable が望ましい。Date、URI、Pathname など。 V a l i d a t o r 、 C a l l b a c k 、etc....
  8. We are hiring! 株式会社Aiming ではエンジニアを募集しています! ゲー ムのWebAPI → 「 普通のWeb

    アプリケー ション」 ではない Rails の設計に興味がある 社内ツー ル → 「 普通のWeb アプリケー ション」 なRails の設計に興 味がある