Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dependency Injection はじめの一歩 / 20191024 C#Tokyo

Taka
October 24, 2019

Dependency Injection はじめの一歩 / 20191024 C#Tokyo

2019/10/24
.NET Core 3.0 リリース記念 C# Tokyo 2019/10 発表資料

Taka

October 24, 2019
Tweet

More Decks by Taka

Other Decks in Programming

Transcript

  1. Dependency Injection はじめの一歩 2019/10/24 .NET Core 3.0 リリース記念 C# Tokyo

    2019/10
  2. 自己紹介 • ふるかわ @futa_ttjh • 都内IT企業勤務のエンジニア • C#、Xamarin.Formsが好き • Blog

    https://takataka430.hatenablog.com/ 2
  3. 本発表について Dependency Injectionについて、自分が調べて理解している、と思っている範囲のこと を発表します。 コードよりも図が多め 間違いなどあれば教えてください! 3

  4. Today’s Goal 以下のような方にDependency Injectionについてイメージしてもらう • Dependency Injection 初めて聞いた • Dependency

    Injection 聞いたことあるけどよくわからない • 依存性の注入?? 何それ怖い・・・ 4
  5. アプリを作る上で大事なこと 変化に強いことが重要! 機能の追加 顧客からの要望 外部環境の変化 ・・・etc 5

  6. 変化に強いとは??? 6

  7. 変化に弱い→クラス間で直接の依存関係がある場合 7 HogeHoge Class Contoso Class 直接利用 Contoso Class が必要

    public class HogeHoge { Contoso contoso = new Contoso(); ・ ・ ・ コードで書くと
  8. 依存している事によるデメリット ・あるクラスが特定の他のクラスに強く結びついている  →カスタマイズが難しい ・利用している外部のクラスがないと動かない  →単体テストがやりにくい 8

  9. Dependency Injection(DI) とは あるクラスが別のクラスを利用するとき、インスタンスを外部から引き渡す仕組み(直接 new はしない) 9 HogeHoge Contoso Contoso

    Class が必要 IContoso Class Class Interface
  10. コードでの例(DIを利用) public class HogeHoge { private IContoso _contoso; public HogeHoge(IContoso

    contoso) { _contoso = contoso; } ・ ・ ・ 10 コンストラクタでインスタンスを 外から受け取っている
  11. 【依存性の注入】の個人的理解 11 依存性 →外側から持ってくる必要のあるインスタンス(オブジェクト) 注入 →クラスの中で生成するのではなく、引数として受け取る

  12. Before After 12 Without DI With DI App obj2 obj3

    obj4 App obj1 obj2 obj3 obj4 obj1 部品は固定 部品をカスタマイズできる
  13. .NET Core におけるDI .NET Coreでは標準でDIをサポート 13 https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.0

  14. Blazorでも使われています 14 https://docs.microsoft.com/ja-jp/aspnet/core/blazor/dependency-injection?view=aspnetcore-3.0

  15. まとめ ・クラスの結合が強いと変更に弱くなってしまう  →そこでDI! ・DIではオブジェクトを引数として受け取る ・DIのメリット  ・カスタマイズがしやすい  ・単体テストがしやすい 15

  16. ご清聴ありがとうございました 16