2012-01-10 11 views
1

私が取り組んでいるプロジェクトのコードで、私は奇妙なアプローチに遭遇しました。静的メソッドを使用するサービスロケータ

public class ServiceManager { 

    public static MailService getMailService() { 
     ... 
    } 

    public static UserInfoService getUserInfoService() { 
     ... 
    } 
    ... 
} 

このクラスで「分散」されている依存関係はSpringフレームワークを使用してそこに注入される。

UI層は、静的メソッドを持つクラスであるサービスロケータのソートを使用しての依存性を得ます。

このアプローチの理由は何ですか?私は欠点だけを見ることができます。ロケータメソッドは静的なので、インタフェースはありません。インタフェースの欠如は、クラスの目的を推論するのをより困難にします。このクラスのクライアントは密接に結合されています(そこにはインターフェイスがないことに注意してください)、他の場所で再利用することは不可能です。

SpringがUIクラスの依存関係を直接注入するほうがずっと良かったですか?

答えて

2

ほとんどのUIフレームワークでは、UIクラスでコンストラクタインジェクションを使用することは(不可能ではないにしても)非常に難しいことがよくあります。その場合、サービスロケータのパターンに戻すのが一般的ですが、UIクラスののみをと繰り返します。

+1

+1オブジェクトのインスタンス化を制御せずにそのオブジェクトに依存関係を持たせる必要がある場合は、サービスロケータパターンに戻す以外の選択肢はありません。 –

関連する問題