DI整備でneedleを使った話2022/10/31 #79 potatotips
View Slide
自己紹介name: かむい @kamui_projectcompany: REALITY Inc.potato tips latest presentation: #62
弊社のDI整備のお話
note紹介第1弾: needleでDI改善に取り組み始めた話第2弾: needleでモジュール間の画面遷移を実現した話第3弾: ↑をSwiftUIで実現した話「REALITY needle」で検索すると出てきます
プロダクト環境の背景リリース: 2018/8/4〜現在主な出来事: 機能拡充, iOS新技術の積極採用, EN積極採用View作成: UIKit → SwiftUI / UIKitチーム文化: プレゼンテーションロジックのUnit Testは積極的に書いている
プロダクト環境の背景リリース: 2018/8/4〜現在主な出来事: 機能拡充, iOS新技術の積極採用, EN積極採用View作成: UIKit → SwiftUI / UIKitチーム文化: プレゼンテーションロジックのUnit Testは積極的に書いている→ initializerのパラメータにデフォルト引数が有ったり無かったり→ Bastard Injection
Bastard Injection● DIのアンチパタン● デフォルト引数 → Testabilityの観点では問題は無い● DIの動機として他クラスへの依存を減らしたい○ 依存対象をI/Fに留めたい○ 結合が強くなる弊社のDI整備 ⇨ Bastard Injectionの解消 + DIルールの整理● DIルールの整理○ 依存はI/Fに留める, ViewControllerの初期化ルール 等■ 依存解決のためのコードを書く手間🤔■ コンパイラセーフ🤔DIの課題と整備
● オブジェクト間の依存解決コードをコンパイル時に自動生成してくれるツール○ AndroidのDaggerと似ている○ コンパイル時にDI注入の安全性を確保■ 自信を持ってコード変更ができる● DI構造が階層的且つ実装上の登場人物が少なくシンプル● 誤ったDI注入があった際には問題箇所の変数名・型・階層をエラー文で教えてくれるとは
とはhttps://github.com/uber/needle/blob/master/README.md
とはhttps://note.com/reality_eng/n/n124fd7da93c3
現在の状況と今後の展望https://note.com/reality_eng/n/n124fd7da93c3
現在の状況と今後の展望https://note.com/reality_eng/n/nbe40c0e17690
現在の状況と今後の展望
● 課題: Bastard InjectionなDIをしていた箇所が多く存在● アクション: DIの整備を進めていく中で、依存問題解決のコード生成をneedleを使い自動化● 現状: 起動画面ほか複数の画面で導入・拡充を進める● 今後の展望: モジュール間の画面遷移もneedleの仕組みを介す形で実現していきたいまとめ
最後に