PHPでDIする
-
Upload
ohasi-yuki -
Category
Engineering
-
view
11.779 -
download
4
Transcript of PHPでDIする
![Page 1: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/1.jpg)
@secret_hamuhamu
PHPでDIする
![Page 2: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/2.jpg)
自己紹介①
名前:大橋 勇希
ニックネーム : はむ
アカウント:@secret_hamuhamu
![Page 3: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/3.jpg)
自己紹介②
お仕事:Webアプリケーションエンジ二ア
使用言語:主にPHP, Perl, R
設計スタイル:なんちゃってTDD / DDD
![Page 4: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/4.jpg)
今回のテーマ
![Page 5: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/5.jpg)
DI
![Page 6: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/6.jpg)
Dependency Injection
![Page 7: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/7.jpg)
依存性の注入
![Page 8: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/8.jpg)
依存性とは?
![Page 9: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/9.jpg)
あるオブジェクトを
使用するには、
別のオブジェクトが
必要なこと
![Page 10: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/10.jpg)
![Page 11: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/11.jpg)
必要なCarクラスを使用するために
![Page 12: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/12.jpg)
必要な依存しているオブジェクトが存在する
![Page 13: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/13.jpg)
必要なDependency Lookup
![Page 14: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/14.jpg)
Dependency Lookup
依存性の探索
![Page 15: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/15.jpg)
Car
Engine
Handle
Pedal
依存の向き
![Page 16: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/16.jpg)
Car
Engine
Handle
Pedal
Carクラスが依存しているオブジェクトを探索している
![Page 17: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/17.jpg)
Dependency Lookup
● 結合度が高い● テストしにくい
![Page 18: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/18.jpg)
DIを使ったパターン
![Page 19: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/19.jpg)
![Page 20: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/20.jpg)
依存しているオブジェクトを注入する
![Page 21: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/21.jpg)
利用側
![Page 22: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/22.jpg)
Car
Engine
Handle
Pedal
![Page 23: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/23.jpg)
Car
Engine
Handle
Pedal
Carクラスに依存しているオブジェクトを注入する
![Page 24: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/24.jpg)
Dependency Injection
● 疎結合● テスタビリティの向上
![Page 25: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/25.jpg)
Dependency Injection
実現方法3パターン
![Page 26: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/26.jpg)
Dependency Injection(1) コンストラクタ・インジェクション
![Page 27: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/27.jpg)
Dependency Injection(1) コンストラクタ・インジェクション
(2) メソッド・インジェクション
![Page 28: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/28.jpg)
Dependency Injection(1) コンストラクタ・インジェクション
(2) メソッド・インジェクション
(3) セッタ・インジェクション
![Page 29: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/29.jpg)
Dependency Injection(1) コンストラクタ・インジェクション
(2) メソッド・インジェクション
(3) セッタ・インジェクション
![Page 30: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/30.jpg)
Dependency Injectionデメリット
● DI対象クラスの生成コストが高い
● 引数の変更に弱い
![Page 31: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/31.jpg)
DI対象のクラスを生成するのが大変
利用側
![Page 32: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/32.jpg)
引数が変更された場合
利用側
![Page 33: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/33.jpg)
Carクラスの利用者が多ければ変更が大変
利用側
![Page 34: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/34.jpg)
DIの設定を管理することができれば、解決できる
![Page 35: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/35.jpg)
DIコンテナ
● 依存性の注入
● インスタンスの生成
一元管理
![Page 36: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/36.jpg)
DIコンテナ
● Pimple● PHP-DI
etc...
![Page 37: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/37.jpg)
Car
Engine
Handle
PedalDIコンテナ
依存の向き
![Page 38: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/38.jpg)
Car
Engine
Handle
PedalDIコンテナ
DIコンテナがクラスのインスタンス生成方法を知っている
依存の向き
![Page 39: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/39.jpg)
Car
Engine
Handle
PedalDIコンテナ
DIコンテナに登録されるクラスはDIコンテナを知らなくてよい
依存の向き
![Page 40: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/40.jpg)
Car
Engine
Handle
PedalDIコンテナ依存性の注入を
一元管理
依存の向き
![Page 41: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/41.jpg)
DIコンテナ利用側
依存の向き
![Page 42: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/42.jpg)
DIコンテナ利用側利用側は、依存性を知らなくてよい
依存の向き
![Page 43: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/43.jpg)
利用側
![Page 44: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/44.jpg)
DIコンテナ
![Page 45: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/45.jpg)
Carクラスの引数を変更したい
![Page 46: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/46.jpg)
DIコンテナ
![Page 47: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/47.jpg)
DIコンテナ
HightEngineに変更するだけでよい
![Page 48: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/48.jpg)
DIコンテナ
HightEngineに変更するだけでよい
引数の変更が簡単
![Page 49: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/49.jpg)
ただし、Carクラスに手を入れないといけない
![Page 50: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/50.jpg)
実装に依存している
![Page 51: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/51.jpg)
抽象に依存すべき
![Page 52: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/52.jpg)
依存関係逆転の原則(DIP)
![Page 53: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/53.jpg)
![Page 54: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/54.jpg)
抽象であるInterfaceに変更
![Page 55: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/55.jpg)
DIコンテナ+
テスト
![Page 56: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/56.jpg)
実装への
依存がなくなり
変更に強い
![Page 57: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/57.jpg)
まとめ
![Page 58: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/58.jpg)
![Page 59: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/59.jpg)
DIしようぜ!!!
![Page 60: PHPでDIする](https://reader034.fdocument.pub/reader034/viewer/2022042706/587e4a5d1a28abeb1a8b4e93/html5/thumbnails/60.jpg)
ご清聴ありがとうございました