中〜大規模 Swift 開発における依存オブジェクト解決の方法を考える
- DI (Dependency Injection) とは?
- DIの基本的な話:知っている人が多かったら省略予定
- コンテナ (Swinject) を用いた DI
- Swinject の DI コンテナを用いた 動的DIの話
- Swiftにおける静的 DI
- Cake-Pattern風の静的DIをSwiftでなんとか実現する話
依存オブジェクトをなんらかの方法を使って外部から差し込む形にすることをDependency Injectionという
- コンストラクタからの注入(コンストラクタ・インジェクション)
- セッターからの注入(セッター・インジェクション)
- フィールドへの注入(フィールド・インジェクション)
- ミックスインによる注入(ミックスイン・インジェクション)
など...
やっていることは依存オブジェクトを外部から差し込んでるだけ
複雑なシステムではたくさんの依存オブジェクトを解決する必要がある
- LoginViewControllerは、UserServiceに依存する
- UserServiceの実装は、UserRepositoryに依存する
- UserRepositoryの実装は、AppApiClientに依存する
- AppApiClientの実装は、HttpClientに依存する
モジュール化とDIにより責務分離ができたが、クライアントコードからサービスのインスタンスを取得するのが難しくなってしまった 😇