Slide 1

Slide 1 text

「DI」と仲良くなる PHPカンファレンス北海道2024 - やまゆ

Slide 2

Slide 2 text

セッション概要 こんにちは。やまゆです。 みなさん、 new してますか?私は、最近はあまりしていないです。なぜなら、インスタンス化はほとんど DI コン テナ に任せてしまうからです。お客様のプロダクトにも DI コンテナが含まれているのではないでしょうか?活用 出来ていますでしょうか? Dependency Inversion 、つまり 「依存性の逆転」 をすることで、より疎結合で柔軟性の高い設計を行うことが出 来ます。 それを実現する Dependency Injection 、つまり 「依存関係の注入」 をするのが DI コンテナ です。 今回は以下の内容を話してみたいと思っています。 - Dependency Inversion と Dependency Injection - DI コンテナ - DI コンテナを自作してみよう

Slide 3

Slide 3 text

赤魔道士系エンジニア ㈱インフィニットループ at 札幌/仙台 
 やまゆ この画像は自撮りでも いつも使っているアイコンでも構いません

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

DI

Slide 6

Slide 6 text

DI しってるひとー!

Slide 7

Slide 7 text

DI 使ってるひとー!

Slide 8

Slide 8 text

DI 🤔

Slide 9

Slide 9 text

Dependency Inversion Dependency Injection

Slide 10

Slide 10 text

Dependency Inversion Dependency Injection 依存性の逆転 依存性の注入

Slide 11

Slide 11 text

Dependency Inversion Dependency Injection 依存性の逆転 依存性の注入 別物!!!

Slide 12

Slide 12 text

Dependency Inversion Dependency Injection 依存性の逆転 依存性の注入 ☝の方が大 事

Slide 13

Slide 13 text

DI と聞くと...

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Slide 16

Slide 16 text

どっからきてんねん

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

Slide 19

Slide 19 text

オワコンです

Slide 20

Slide 20 text

こんなもんは DI の本質 とちゃうねん

Slide 21

Slide 21 text

Dependency Inversion 依存性の逆転

Slide 22

Slide 22 text

これは設計の おはなし

Slide 23

Slide 23 text

DI は設計の話で出てくる仕組みの一つ - Controller に全部書いてあるコードでは不要! - 規模が大きい、複数人で開発している、アーキテクチャ云々の時に出る - 規模が大きい=依存関係が複雑になってくる - 依存関係を綺麗に保つことがメンテナンス性の向上につながる!

Slide 24

Slide 24 text

Dependency Inversion ☝ 依存性の逆転

Slide 25

Slide 25 text

依存性?

Slide 26

Slide 26 text

依存性? 壱百満天原サロメ 👈金属性

Slide 27

Slide 27 text

依存性? 壱百満天原サロメ 👈金属性 「壱百満天原サロメと いうカードは、金属性と いう属性に依存してい る」

Slide 28

Slide 28 text

依存性? 壱百満天原サロメ 👈金属性 「金属性は、壱百満天 原サロメというカードに 依存している」 「壱百満天原サロメと いうカードは、金属性と いう属性に依存してい る」

Slide 29

Slide 29 text

依存性? 壱百満天原サロメ 👈金属性 「壱百満天原サロメと いうカードは、金属性と いう属性に依存してい る」 「金属性は、壱百満天 原サロメというカードに 依存している」

Slide 30

Slide 30 text

壱百満天原サロメ

Slide 31

Slide 31 text

👈パッケージ

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Slide 34

Slide 34 text

Dependency Inversion ☝ 依存性の逆転

Slide 35

Slide 35 text

逆転すべき!

Slide 36

Slide 36 text

何故?

Slide 37

Slide 37 text

何故依存性の逆転が必要なのか? - パッケージの「凝集度」と「結合度」の関係 - 各パッケージが持つ 「知識」を分離して、凝集度を高める - パッケージ間の「結合度」を下げて、メンテナンスを容易にする - OOP の詳しいお話は割愛 - より簡便に記すと☟ - 「Aさんが知っていることを減らし、Bさんとは決まったルートでだけ会話する」

Slide 38

Slide 38 text

Card パッケージが DB と かどうとか関係ないやん

Slide 39

Slide 39 text

Card パッケージは永続化さえさ れれば良くて、 MySQL とか Redis とか そういうのはどうでも良い!

Slide 40

Slide 40 text

Dependency Inversion ☝ 依存性の逆転

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

Slide 43

Slide 43 text

矢印が反転している!

Slide 44

Slide 44 text

Slide 45

Slide 45 text

Dependency Inversion 依存性の逆転

Slide 46

Slide 46 text

Dependency Inversion まとめ - 規模の大きいプロダクトはパッケージングを行う(≒設計) - パッケージ間の依存関係が生まれる - 知らなくても良いパッケージに依存するとメンテが大変 - 良いとされる設計≒パッケージの依存関係が適切な設計 - 依存関係が適切であれば、パッケージごとに分離して開発可能(理想論)

Slide 47

Slide 47 text

Slide 48

Slide 48 text

誰が繋げるの?

Slide 49

Slide 49 text

Dependency Injection 依存性の注入

Slide 50

Slide 50 text

Dependency Injection 依存性の注入 ☝

Slide 51

Slide 51 text

注入? - インスタンスを作って流し込む - 作り方を知っている神クラス(DI Container)が構築する

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

Dependency Injection は Dependency Inversion を実現するキー

Slide 54

Slide 54 text

DI(Inversion と Injection) すこし わかってもらえれば うれしいです!

Slide 55

Slide 55 text

https://www.infiniteloop.co.jp We are hiring!