Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
PHP勉強会 ServiceとRepository
Slide 2
Slide 2 text
自己紹介 ショウノシオリ ○ 株式会社chatbox ○ エンジニア ○ @shoshoでQiita記事 書いてます ○ Laravel と日々格闘
Slide 3
Slide 3 text
最近開発したもので出てきた Service と Repository がよくわからなかったので勉強してみました
Slide 4
Slide 4 text
開発したもの ▷ Laravel 5.4 ▷ ECサイト(管理画面のみ) ▷ フロントは他の会社 ▷ コードの設計は完了済みだった
Slide 5
Slide 5 text
開発に使う主なもの ▷ View ▷ Route ▷ Controller
Slide 6
Slide 6 text
と ▷ Service ▷ Repository ▷ Eloquent
Slide 7
Slide 7 text
DBにアクセスするまでの流れ Controller Service Repository Eloquent DB
Slide 8
Slide 8 text
DBまわりがなぜ こんなに細かく分けられているんだろう?
Slide 9
Slide 9 text
Service と Repository は必要なのか?
Slide 10
Slide 10 text
DBにアクセスするまでの流れが Controller Service Repository Eloquent DB だとすると
Slide 11
Slide 11 text
2つの問題点 ▷ DBの設計が変わったときに、 Eloquentを 使っているコントローラ全てを修正する必要 が出て来る ○ めんどう ○ 大変 ▷ フロントでも同じDB操作をすることがある のに、別々でつくるのはもったいない ○ ユーザー情報の取得、とか
Slide 12
Slide 12 text
この2つを解決するのが Service と Repository
Slide 13
Slide 13 text
DBの設計が変わったときに、Eloquentを使っ ているコントローラ全てを修正する必要が出て 来る 問題
Slide 14
Slide 14 text
Repositoryが解決 ▷ Eloquentを操作する唯一のクラス。ここか ら先はEloquentではなくEntityとしてデータ を持ち回すようにしている。 ○ DB変更に伴うEloquentの修正が与える 影響はリポジトリ内に収まる ○ 修正箇所を見つけやすい ○ 修正する場所も少なくて済む
Slide 15
Slide 15 text
フロントでも同じDB操作をすることがあるの に、別々でつくるのはもったいない 問題
Slide 16
Slide 16 text
Serviceが解決 ▷ 「ユーザー情報を取得したい」といった具体 的な要求に対する処理を提供するクラス。 ○ 再利用できる ○ 処理自体を固めることになるので、画面 の仕様変更などに強くなる
Slide 17
Slide 17 text
なので以下のような役割分担になっている のかな、と
Slide 18
Slide 18 text
Controller Service Repository Eloquent DB リクエストの受取と 結果を返す、だけ 要求に対するものを 提供するクラス Eloquentを管理する 唯一のクラス DBを操作する
Slide 19
Slide 19 text
このように 関心事 = ドメイン を中心に開発をすすめる方法が ドメイン駆動設計(DDD) 的な?
Slide 20
Slide 20 text
なぜこんなに細かくわけられているんだろう? の答えとしては
Slide 21
Slide 21 text
▷ フロントとの開発をみこしたものだから ▷ 各クラスにしっかり役割分担しておくことで 修正しやすくするため かなぁと思いました
Slide 22
Slide 22 text
つくる立場であっても 少しずつ設計思想についても学んでいきたいと 思います
Slide 23
Slide 23 text
Thanks! Any questions?