既存のプロジェクトには多くの DAO があります (現在はインターフェイスがありませんが、変更される可能性があります)。各 DAO クラスに Spring 管理の Bean を接続してサービス層に注入するのではなく、次のような種類の DAO の「ファクトリー」を用意します。
public class DAOFactory {
private static DAOFactory daoFac;
static{
daoFac = new DAOFactory();
}
private DAOFactory(){}
public static DAOFactory getInstance(){
return daoFac;
}
public MyDAO1 getMyDAO1(){
return new MyDAO1();
}
public MyDAO2 getMyDAO2(){
return new MyDAO2();
}
...
(MyDAO1 と MyDAO2 は具象クラスであることに注意してください)
これにより、サービス層内で DAO メソッドを簡単に追加/呼び出すことができます。1.) DAO インターフェイスをプロパティとしてサービス クラスに追加します。2.) 構成を介して DAO 実装をサービス メソッドに接続します。(また、1 つのサービス クラスで複数の DAO を使用することもあります)。
DAOFactory.getInstance().getMyDAO1().doSomething();
これまでのところ、この戦略はうまく機能しています (実装を切り替える必要はあまりありませんでした) が、新しく始めることができた場合、より良い方法があるかどうか疑問に思っています。DAO を Bean として自動配線することを検討しましたが、使用されている DAO を表すために、各サービス クラスにプロパティを作成する必要があります。そして、大規模なプロジェクトでは、bean の自動配線を開始することをためらっています。すべての開発者に可視性を提供する必要があります。
a.) 実装に密結合しているが、コード/構成のオーバーヘッドが少ないことと、b.) インターフェースに疎結合しているが、多くのコード/構成のオーバーヘッドが必要であることの間でフリップフロップしているように感じます。
私が行方不明になっているより良い方法はありますか?その中間の何か?意見歓迎。