Avatar
Avatar
koher
使いにくい印象があるのはどのあたりですか?型パラメータを書いて回らなければならない部分?
omochimetaru 8/3/2023 7:27 AM
1. 依存の再依存が扱えないような気がします。 例えば、 Repositoryオブジェクトと、 それを内部に持つ UserEditService と、 同様にそれを内部に持つ ZooEditService があったとします。 で、 UserZooController.post(...) で、 UserEditService と ZooEditService を利用するとします。 ここで「依存の再依存」とは、 「依存先Repositoryに、UserEditServiceやZooEditServiceなど複数箇所から依存している」状況のことです。 このとき、 Foo<> には、 直接の Repository と、 UserEditService の型パラメータの Repository と、 ZooEditService の型パラメータの Repository が3回出現しているので、 型パメータとして具体的な依存の実体である DatabaseRepository を 3回書かないといけない。 しかもこれは Repository を利用するコンポーネントが増えるたびに増えていきます。 一般的な動的なDIコンテナだったら、 まず Repository を登録して、その他のそれを利用するサービスは、 自身の依存先を DIコンテナ自体から取り出す事によって構築するので、 「具体的なRepositoryが何であるか」という宣言(コード上の表明) は1箇所で良いはずが、 このアプローチだと自明なはずの事を何度も繰り返して書かないといけない問題がありそうです。 (edited)
7:29 AM
2. 依存の再依存の差し替えがうまくできない気がします。 上記のシナリオに基づいて、 UserZooController.postの動作を自動テストするために、 「他の構成はそのままで、Repositoryを DummyRepository に変える」というセットアップがしたいとします。 しかし、できない気がします。 共通部分も含めて、テスト用の構成をすべて書きくださないといけないとすると、 「ある一箇所だけスタブに変更する」という意味づけのコードが書けない気がします。