Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ServiceとRepository
Search
ショウノシオリ
April 12, 2017
Programming
0
20
ServiceとRepository
2017/4/12 関西PHPユーザーズグループの勉強会での登壇資料です。
ServiceとRepositoryについて自分なりに解釈してみたことをまとめました。
ショウノシオリ
April 12, 2017
Tweet
Share
More Decks by ショウノシオリ
See All by ショウノシオリ
Nuxt / Vue 開発でやりがちな 「読みづらい」「わかりづらい」コード
sshono1210
0
170
開発チームのリーダーとしてどうあるべきか?
sshono1210
2
1.1k
Nuxt.js のディレクトリ
sshono1210
0
2.8k
Nuxt.js で SSR 対応する
sshono1210
0
2.2k
array_merge と array_push の違いについて
sshono1210
0
430
全くデザインを勉強したことのないエンジニアが「なるほどデザイン」を読んで少しだけ勉強した話
sshono1210
0
180
Vue.js の methods と computed
sshono1210
0
87
すぐに使える ES2015 の基本構文3つ
sshono1210
0
60
肌で感じたディレクションとマネジメント
sshono1210
0
45
Other Decks in Programming
See All in Programming
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
170
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
170
Keeping it Ruby: Why Your Product Needs a Ruby SDK - RubyWorld 2024
envek
0
180
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
690
ドメインイベント増えすぎ問題
h0r15h0
1
210
Refactor your code - refactor yourself
xosofox
1
260
第5回日本眼科AI学会総会_AIコンテスト_3位解法
neilsaw
0
170
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
110
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
8
4.1k
MCP with Cloudflare Workers
yusukebe
2
220
CSC305 Lecture 26
javiergs
PRO
0
140
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
4
210
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Building Your Own Lightsaber
phodgson
103
6.1k
The Language of Interfaces
destraynor
154
24k
Optimizing for Happiness
mojombo
376
70k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
Agile that works and the tools we love
rasmusluckow
328
21k
For a Future-Friendly Web
brad_frost
175
9.4k
Why Our Code Smells
bkeepers
PRO
335
57k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
BBQ
matthewcrist
85
9.4k
Transcript
PHP勉強会 ServiceとRepository
自己紹介 ショウノシオリ ◦ 株式会社chatbox ◦ エンジニア ◦ @shoshoでQiita記事 書いてます ◦
Laravel と日々格闘
最近開発したもので出てきた Service と Repository がよくわからなかったので勉強してみました
開発したもの ▷ Laravel 5.4 ▷ ECサイト(管理画面のみ) ▷ フロントは他の会社 ▷ コードの設計は完了済みだった
開発に使う主なもの ▷ View ▷ Route ▷ Controller
と ▷ Service ▷ Repository ▷ Eloquent
DBにアクセスするまでの流れ Controller Service Repository Eloquent DB
DBまわりがなぜ こんなに細かく分けられているんだろう?
Service と Repository は必要なのか?
DBにアクセスするまでの流れが Controller Service Repository Eloquent DB だとすると
2つの問題点 ▷ DBの設計が変わったときに、 Eloquentを 使っているコントローラ全てを修正する必要 が出て来る ◦ めんどう ◦ 大変 ▷
フロントでも同じDB操作をすることがある のに、別々でつくるのはもったいない ◦ ユーザー情報の取得、とか
この2つを解決するのが Service と Repository
DBの設計が変わったときに、Eloquentを使っ ているコントローラ全てを修正する必要が出て 来る 問題
Repositoryが解決 ▷ Eloquentを操作する唯一のクラス。ここか ら先はEloquentではなくEntityとしてデータ を持ち回すようにしている。 ◦ DB変更に伴うEloquentの修正が与える 影響はリポジトリ内に収まる ◦ 修正箇所を見つけやすい
◦ 修正する場所も少なくて済む
フロントでも同じDB操作をすることがあるの に、別々でつくるのはもったいない 問題
Serviceが解決 ▷ 「ユーザー情報を取得したい」といった具体 的な要求に対する処理を提供するクラス。 ◦ 再利用できる ◦ 処理自体を固めることになるので、画面 の仕様変更などに強くなる
なので以下のような役割分担になっている のかな、と
Controller Service Repository Eloquent DB リクエストの受取と 結果を返す、だけ 要求に対するものを 提供するクラス Eloquentを管理する
唯一のクラス DBを操作する
このように 関心事 = ドメイン を中心に開発をすすめる方法が ドメイン駆動設計(DDD) 的な?
なぜこんなに細かくわけられているんだろう? の答えとしては
▷ フロントとの開発をみこしたものだから ▷ 各クラスにしっかり役割分担しておくことで 修正しやすくするため かなぁと思いました
つくる立場であっても 少しずつ設計思想についても学んでいきたいと 思います
Thanks! Any questions?