Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

変化に強いとは??? 6

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

コードでの例(DIを利用) public class HogeHoge { private IContoso _contoso; public HogeHoge(IContoso contoso) { _contoso = contoso; } ・ ・ ・ 10 コンストラクタでインスタンスを 外から受け取っている

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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