Dependency Injection はじめの一歩 / 20191024 C#Tokyo
by
Taka
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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