Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

serviceクラスをやめようサブクラスを使おう

3,948 views

Published on

https://ginza-rails.connpass.com/event/152498/ の発表資料です。

Published in: Engineering
  • Be the first to comment

serviceクラスをやめようサブクラスを使おう

  1. 1. serviceクラスをやめよう サブクラスを使おう よしだあつし@銀座Rails#15
  2. 2. 2 名前: よしだあつし
 SNS: @yalab
 職業: 株式会社ジラフ CTO
 Ruby歴: since 1.6
 Rails歴: since 0.8
 趣味: 料理
 自己紹介
  3. 3. 3 ジラフ社が運営しているサービス ヒカカク peing-質問箱 トレカ専用フリマアプリ magi
  4. 4. 4 service クラスとは何か?
  5. 5. 5 わかりません
  6. 6. 6 service クラス ● PoEAA ● DDD ● トランザクションスクリプト ● Decorator ● Command ● static メソッド
  7. 7. 7 曖昧な定義
  8. 8. 8 要は使いどころだよね
  9. 9. 9 要は使いどころだよね ダメ絶対
  10. 10. 10 MVC
  11. 11. 11 MVC M: ビジネスロジック V: 見た目 C: ユーザーからの入力をモデルに伝える
  12. 12. 12 責務から考える
  13. 13. 13 MVCの責務 M: データの一貫性 V: 出力されたデータの整形 C: データの入出力
  14. 14. 14 service クラスの責務?
  15. 15. 15 service クラスの責務? ● トランザクションスクリプトは Model の役目とかぶる ● デコレーターパターンは view とかぶる
  16. 16. 16 そもそもなぜ我々は service クラスを使うよ うになったのか?
  17. 17. 17 声の大きい人 fat model をなんとかするため
  18. 18. 18 model を分割して責任範囲を限定したい
  19. 19. 19 service クラスにするのって おかしくない?
  20. 20. 20 ということで吉田からの提案
  21. 21. 21 fat model を サブクラスに分割する
  22. 22. 22 例) User ● 管理者は全てのデータを書き換えられる ● ユーザー自身の生年月日は create 時だけ ● プレミアムユーザーと一般ユーザーがいる
  23. 23. 23 controller が分かれてる事は多い class Admin::Users < ApplicationController end class Users < ApplicationController end class Me::Users < ApplicationController end
  24. 24. 24 model を責任範囲ごとに作る class User < ApplicationController validates :birthday, presence: true end class User::General < User attr_readonly :birthday end
  25. 25. 25 まとめ(今回言いたかったこと) ● Service クラス止めろ ● 責務からコードの振る舞いを定義しましょう ● fat model 対策の一例としてサブクラスに分割す るとわりと上手くワークする ● 声が大きい人が言うからといって鵜呑みにしない
  26. 26. 26 ご清聴ありがとうございました。

×