Submit Search
Upload
serviceクラスをやめようサブクラスを使おう
•
4 likes
•
11,537 views
よしだ あつし
Follow
https://ginza-rails.connpass.com/event/152498/ の発表資料です。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 26
Download now
Download to read offline
Recommended
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
Koichiro Matsuoka
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
MVC の Model を考える
MVC の Model を考える
tomo_masakura
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
Recommended
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
Koichiro Matsuoka
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
MVC の Model を考える
MVC の Model を考える
tomo_masakura
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
Go言語のスライスを理解しよう
Go言語のスライスを理解しよう
Yasutaka Kawamoto
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
shinnosuke kugimiya
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
Ormとの付き合い方
Ormとの付き合い方
豊明 尾古
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
Yuta Hiroto
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
Takuya Sato
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
Service Cloud Trailblazers Meetup #01
Service Cloud Trailblazers Meetup #01
sfdc_sctb
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Takakiyo Tanaka
More Related Content
What's hot
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
Go言語のスライスを理解しよう
Go言語のスライスを理解しよう
Yasutaka Kawamoto
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
shinnosuke kugimiya
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
増田 亨
Ormとの付き合い方
Ormとの付き合い方
豊明 尾古
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
Yuta Hiroto
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
Takuya Sato
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
What's hot
(20)
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
Go言語のスライスを理解しよう
Go言語のスライスを理解しよう
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
PostgreSQLアンチパターン
PostgreSQLアンチパターン
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
Ormとの付き合い方
Ormとの付き合い方
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Similar to serviceクラスをやめようサブクラスを使おう
Service Cloud Trailblazers Meetup #01
Service Cloud Trailblazers Meetup #01
sfdc_sctb
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Takakiyo Tanaka
Separate Model from Catalyst
Separate Model from Catalyst
techmemo
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
Yuta Matsumura
MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方
Kazuki Shibata
Service Cloud Trailblazers Meetup #02
Service Cloud Trailblazers Meetup #02
sfdc_sctb
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
Koichi Sakata
Web開発初心者がReactをチームに導入して半年経った
Web開発初心者がReactをチームに導入して半年経った
kazuki matsumura
自滅のAnsible - Ansible Night 2021年2月
自滅のAnsible - Ansible Night 2021年2月
Shoichiro Suzuki
究極にして至高のWAF
究極にして至高のWAF
Yuki Ishikawa
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Atsushi Kambara
Similar to serviceクラスをやめようサブクラスを使おう
(11)
Service Cloud Trailblazers Meetup #01
Service Cloud Trailblazers Meetup #01
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Separate Model from Catalyst
Separate Model from Catalyst
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方
Service Cloud Trailblazers Meetup #02
Service Cloud Trailblazers Meetup #02
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
Web開発初心者がReactをチームに導入して半年経った
Web開発初心者がReactをチームに導入して半年経った
自滅のAnsible - Ansible Night 2021年2月
自滅のAnsible - Ansible Night 2021年2月
究極にして至高のWAF
究極にして至高のWAF
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
More from よしだ あつし
ruby で書く 脆弱なコード
ruby で書く 脆弱なコード
よしだ あつし
CTOのおしごと
CTOのおしごと
よしだ あつし
Selfを考える
Selfを考える
よしだ あつし
Railsにコントリビュートしてきました
Railsにコントリビュートしてきました
よしだ あつし
Rubyコードの最適化
Rubyコードの最適化
よしだ あつし
低レイヤから見たrubyプログラミング
低レイヤから見たrubyプログラミング
よしだ あつし
まじょのおしごとの裏側
まじょのおしごとの裏側
よしだ あつし
僕が勉強をする モチベーションと勉強法
僕が勉強をする モチベーションと勉強法
よしだ あつし
Dockerプレゼン
Dockerプレゼン
よしだ あつし
Vue.js ハンズオン資料
Vue.js ハンズオン資料
よしだ あつし
よい名前を付けましょう リーダブルなんたらとか
よい名前を付けましょう リーダブルなんたらとか
よしだ あつし
Gitの使い方あれこれ
Gitの使い方あれこれ
よしだ あつし
私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について
よしだ あつし
15分でできるSQLインジェクション
15分でできるSQLインジェクション
よしだ あつし
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
よしだ あつし
テスト駆動開発入門
テスト駆動開発入門
よしだ あつし
Railsの今昔
Railsの今昔
よしだ あつし
デバッガでデバッグしない
デバッガでデバッグしない
よしだ あつし
Rails3使用雑感
Rails3使用雑感
よしだ あつし
Twitterでネットストーカーをしよう
Twitterでネットストーカーをしよう
よしだ あつし
More from よしだ あつし
(20)
ruby で書く 脆弱なコード
ruby で書く 脆弱なコード
CTOのおしごと
CTOのおしごと
Selfを考える
Selfを考える
Railsにコントリビュートしてきました
Railsにコントリビュートしてきました
Rubyコードの最適化
Rubyコードの最適化
低レイヤから見たrubyプログラミング
低レイヤから見たrubyプログラミング
まじょのおしごとの裏側
まじょのおしごとの裏側
僕が勉強をする モチベーションと勉強法
僕が勉強をする モチベーションと勉強法
Dockerプレゼン
Dockerプレゼン
Vue.js ハンズオン資料
Vue.js ハンズオン資料
よい名前を付けましょう リーダブルなんたらとか
よい名前を付けましょう リーダブルなんたらとか
Gitの使い方あれこれ
Gitの使い方あれこれ
私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について
15分でできるSQLインジェクション
15分でできるSQLインジェクション
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
テスト駆動開発入門
テスト駆動開発入門
Railsの今昔
Railsの今昔
デバッガでデバッグしない
デバッガでデバッグしない
Rails3使用雑感
Rails3使用雑感
Twitterでネットストーカーをしよう
Twitterでネットストーカーをしよう
serviceクラスをやめようサブクラスを使おう
1.
serviceクラスをやめよう サブクラスを使おう よしだあつし@銀座Rails#15
2.
2 名前: よしだあつし SNS: @yalab 職業:
株式会社ジラフ CTO Ruby歴: since 1.6 Rails歴: since 0.8 趣味: 料理 自己紹介
3.
3 ジラフ社が運営しているサービス ヒカカク peing-質問箱 トレカ専用フリマアプリ
magi
4.
4 service クラスとは何か?
5.
5 わかりません
6.
6 service クラス ● PoEAA ●
DDD ● トランザクションスクリプト ● Decorator ● Command ● static メソッド
7.
7 曖昧な定義
8.
8 要は使いどころだよね
9.
9 要は使いどころだよね ダメ絶対
10.
10 MVC
11.
11 MVC M: ビジネスロジック V: 見た目 C:
ユーザーからの入力をモデルに伝える
12.
12 責務から考える
13.
13 MVCの責務 M: データの一貫性 V: 出力されたデータの整形 C:
データの入出力
14.
14 service クラスの責務?
15.
15 service クラスの責務? ● トランザクションスクリプトは
Model の役目とかぶる ● デコレーターパターンは view とかぶる
16.
16 そもそもなぜ我々は service クラスを使うよ うになったのか?
17.
17 声の大きい人 fat model
をなんとかするため
18.
18 model を分割して責任範囲を限定したい
19.
19 service クラスにするのって おかしくない?
20.
20 ということで吉田からの提案
21.
21 fat model を
サブクラスに分割する
22.
22 例) User ● 管理者は全てのデータを書き換えられる ●
ユーザー自身の生年月日は create 時だけ ● プレミアムユーザーと一般ユーザーがいる
23.
23 controller が分かれてる事は多い class Admin::Users
< ApplicationController end class Users < ApplicationController end class Me::Users < ApplicationController end
24.
24 model を責任範囲ごとに作る class User
< ApplicationController validates :birthday, presence: true end class User::General < User attr_readonly :birthday end
25.
25 まとめ(今回言いたかったこと) ● Service クラス止めろ ●
責務からコードの振る舞いを定義しましょう ● fat model 対策の一例としてサブクラスに分割す るとわりと上手くワークする ● 声が大きい人が言うからといって鵜呑みにしない
26.
26 ご清聴ありがとうございました。
Download now