Service Locator
Appendix-1 アンチパターンとしての Service Locator
論点1: Service Locator自体への依存関係が発生する
- クライアントコードがService Locator自体に依存することになる
- 依存関係を切り離す為に新たな依存関係が生じるという本末転倒な事態が発生する
論点2: ユニットテストが面倒になる
- DIではモックオブジェクトをクライアントクラスに渡すだけでユニットテストが行える
- Service Locatorではユニットテスト用に構成したService Locatorのインスタンスが必要になる
- テスト毎にカスタマイズされたService Locatorを構成するのはそれなりに手間がかかる為、ユニットテストが面倒になる
- テスト毎にカスタマイズされたService Locatorの実装が正しいかの確認も必要になり、やはりユニットテストが面倒になる
論点3: 依存関係が見えなくなる
- 依存関係の解決が Service Locator経由になる為、クライアント側のコードからは依存関係が確認できなくなる
- 具体的にどのクラスが渡されるかはService Locatorの実装を確認する必要が出てくる為、手間が増える
Appendix-2 DIとService Locatorの区別方法
- クライアントコードの外でコンテナからインスタンスを取り出してクライアントコードに与えている場合はDIパターンを用いている
- クライアントコードの内側でDIコンテナからインスタンスを取り出している場合はService Locatorパターンを用いている