Composition Rootから考える煩雑になりがちな依存関係を解消する仕組み by shiz

iOSDC Japan 2020
レギュラートーク(20分)

Composition Rootから考える煩雑になりがちな依存関係を解消する仕組み

stzn3 shiz stzn3
7

DIはデザインパターンの一つであるDependency Injection(依存関係注入)の略として使われることが多く
あるオブジェクトに必要な他のオブジェクトへの参照を外部から与えることで
オブジェクト同士が密になることを防ぎ
テストのしやすさや変更のしやすさなどを保つことができると言われています。

しかし
このDIを徹底すると
例えば1つ依存関係を追加するだけで

  • 多くの箇所に引数を追加しなければならない
  • あちこちにimportを書かなければならない
  • 再びビルドが成功するまでに時間がかかる
  • チームメンバーとのコンフリクトが頻繁に起きる
  • オブジェクト自身の本来の役割とは関係のない記述をして無駄だと感じる

といったことが起きてしまう可能性もあります。

こういった問題を解決する方法の1つに
Composition Root
という考えがあります。

この考えを導入することで

  • 依存関係の変更による修正箇所を減らすことができる
  • 依存関係の管理を集約できる
  • 依存関係が理解しやすくなる
  • オブジェクトから本来は関係のない記述を減らすことができる

などの効果があります。

さらに
もう1つのDIであるDependency Inversion(依存関係逆転の原則)や
その他のデザインパターンも併せて活用することで

  • DispatchQueueなどのスレッドの管理
  • ログやアナリティクスのの送信
  • キャッシュなど特定の場合にのみ必要な機能の追加

なども
個々のオブジェクトから分離させることができます。

普段とはちょっと違った考え方や手法かもしれませんが
新しい世界に触れることで
より良い設計や実装方法を考える上での何かのヒントになれば幸いです。