Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PHPでDIする

12,613 views

Published on

DIについて、まとめてみました。
PHP カンファレンス2015で発表したため、PHPでコード書いた。

Published in: Engineering
  • Be the first to comment

PHPでDIする

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

×