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

TypeScriptでDIしてみた

 TypeScriptでDIしてみた

5f72c4101bc29a8a83812e376d7527ba?s=128

Ryohei Hisamitsu

January 16, 2021
Tweet

Transcript

  1. で してみた NCDC株式会社 久光遼平

  2. DI(Dependency Injection)とは? • 依存性(Dependency)の注入(Injection) • もう少しわかりやすく あるクラスが依存している要素をクラスの外側から注入すること ClassA { private

    classB constructor( ClassBInterface classB ) { this.classB = classB; } } ClassA { private classB constructor() { this.classB = new ClassB(); } }
  3. 何が嬉しいの? • 単体テストがしやすくなる! class Service { private repository; constructor() {

    this.repository = new Repository(); } find() { // ... this.repository.find(); return; } } よくあるテストしにくい例 テストしたいのはService層のロジック Repository(DB)のテストも含まれてしまう  ・テスト失敗した時の切り分けが面倒  ・実行時間がかかる DI→テスト側からモックを注入できる!
  4. 実際のアプリではどうやって注入するの? • DIコンテナという便利な仕組みがある ◦ インスタンスの生成、注入を一括で行ってくれる

  5. TypeScriptのDIライブラリ

  6. ②注入する側 ①注入される側 ③DIコンテナ 実装例 ④express

  7. まとめ • DIすればテストしやすい作りにできる • DIの仕組みを作るにはInversifyJSを使えば楽 • あとはテストの時にモックを注入するだけ! • 追記:Jestのモック機能を使えば、DIしなくてもテストは書けそう ◦

    DIのメリット→より簡単に自由にテスト書ける