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

    View Slide

  2. 自己紹介
    ● ふるかわ @futa_ttjh
    ● 都内IT企業勤務のエンジニア
    ● C#、Xamarin.Formsが好き
    ● Blog https://takataka430.hatenablog.com/
    2

    View Slide

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

    View Slide

  4. Today’s Goal
    以下のような方にDependency Injectionについてイメージしてもらう
    ● Dependency Injection 初めて聞いた
    ● Dependency Injection 聞いたことあるけどよくわからない
    ● 依存性の注入?? 何それ怖い・・・
    4

    View Slide

  5. アプリを作る上で大事なこと
    変化に強いことが重要!
    機能の追加
    顧客からの要望
    外部環境の変化
    ・・・etc
    5

    View Slide

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

    View Slide

  7. 変化に弱い→クラス間で直接の依存関係がある場合
    7
    HogeHoge Class Contoso Class
    直接利用
    Contoso Class
    が必要
    public class HogeHoge
    {
    Contoso contoso = new Contoso();



    コードで書くと

    View Slide

  8. 依存している事によるデメリット
    ・あるクラスが特定の他のクラスに強く結びついている
     →カスタマイズが難しい
    ・利用している外部のクラスがないと動かない
     →単体テストがやりにくい
    8

    View Slide

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

    View Slide

  10. コードでの例(DIを利用)
    public class HogeHoge
    {
    private IContoso _contoso;
    public HogeHoge(IContoso contoso)
    {
    _contoso = contoso;
    }



    10
    コンストラクタでインスタンスを
    外から受け取っている

    View Slide

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

    View Slide

  12. Before After
    12
    Without DI With DI
    App
    obj2
    obj3
    obj4
    App
    obj1
    obj2
    obj3
    obj4
    obj1
    部品は固定 部品をカスタマイズできる

    View Slide

  13. .NET Core におけるDI
    .NET Coreでは標準でDIをサポート
    13
    https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.0

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide