Submit Search
Upload
serviceクラスをやめようサブクラスを使おう
•
4 likes
•
11,571 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
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
DDD sample code explained in Java
DDD sample code explained in Java
増田 亨
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
JustSystems Corporation
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
Recommended
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
DDD sample code explained in Java
DDD sample code explained in Java
増田 亨
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
JustSystems Corporation
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
例外設計における大罪
例外設計における大罪
Takuto Wada
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
増田 亨
MVC の Model を考える
MVC の Model を考える
tomo_masakura
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
Yuta Matsumura
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
Service Cloud Trailblazers Meetup #01
Service Cloud Trailblazers Meetup #01
sfdc_sctb
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Takakiyo Tanaka
More Related Content
What's hot
例外設計における大罪
例外設計における大罪
Takuto Wada
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
増田 亨
MVC の Model を考える
MVC の Model を考える
tomo_masakura
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
Yuta Matsumura
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
What's hot
(20)
例外設計における大罪
例外設計における大罪
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
MVC の Model を考える
MVC の Model を考える
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
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
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クラスをやめようサブクラスを使おう
(10)
Service Cloud Trailblazers Meetup #01
Service Cloud Trailblazers Meetup #01
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Javaプログラマーももう逃げられない。マイクロサービスとAPIの世界。
Separate Model from Catalyst
Separate Model from Catalyst
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