作成している小さなWebアプリケーションがあります。主に単体テスト機能を向上させるために(そしてコードをさらに分離するために)、いくつかの依存関係の具体的な実装を検索するためにサービスロケーターパターンを実装しています。Service Locatorシングルトンクラス自体にはほとんど満足していますが、どこに配置し、どのようにロードするかについて興味があります。シングルトンは基本的に、インターフェースのハッシュマップ->具体的な実装を管理します。
ワークスペースにいくつかのプロジェクトがあります。
1)サーブレットコードとプレゼンテーション層処理を含むプレゼンテーション層プロジェクト。(以下の2と3を使用)
2)データベースなどにアクセスするためのコードを含むデータアクセス層プロジェクト(以下の3を使用)
3)両方のレイヤーで使用されるさまざまなデータモデルを含む共通のプロジェクト。(他のプロジェクト参照はありません)
サービスロケーターは、上記のプロジェクト1と2の両方でクラスの実装を提供するためのものなので、どこに配置するのが最適か疑問に思います。
私が立ち往生しているもう1つの質問は、デフォルトの実装でそれをロードするのに最適な方法です。1つのオプションは、すべてのデフォルトの実装をシングルトンサービスロケータークラスのコンストラクターに配置することです。例えば:
private ServiceLocator() {
services.put(ISomeClass.class, new SomeClass());
....
}
別のオプションは、デフォルトの実装でServiceLocatorをロードする責任を持つ別のクラスを持つことです。しかし、問題は、デフォルトの実装が他のクラスの前にロードされるように、それをどのように呼び出すかです。
だから私は私の2つの質問は次のとおりだと思います:
1)ServiceLocatorはどのプロジェクトに最適ですか?
2)デフォルトの実装でクラスをロードするためにどのようなソリューションをお勧めしますか?
ありがとう