1

作成している小さな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)デフォルトの実装でクラスをロードするためにどのようなソリューションをお勧めしますか?

ありがとう

4

1 に答える 1

1

依存性注入に関するMartinFowlersの記事は、あなたの質問のいくつかに対応していると思います。個人的には、特にJavaでサービスロケーターパターンの最大のファンではありません。Javaには高品質のDIフレームワークがたくさんあります(確かにやり過ぎかもしれませんが、実装に関するこの種のアーキテクチャ上の決定について考える必要があるためです。サービスロケーターはすでに、最終的には切り替える必要があるかもしれません)。あなたの質問に:

1)1)と2)に依存する別のプロジェクトで言います2)言及された記事から:

依存性注入とサービスロケーターは、必ずしも相互に排他的な概念ではありません。両方を一緒に使用する良い例は、Avalonフレームワークです。Avalonはサービスロケーターを使用しますが、インジェクションを使用してコンポーネントにロケーターの場所を指示します。

したがって、依存性注入を使用して、ロケーターをデフォルトの実装で埋めることもできます。

于 2011-06-09T15:33:04.820 に答える