我们在现有项目中有许多 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 实现连接到服务方法中。(而且我们有时在一个服务类中使用多个 DAO)。
DAOFactory.getInstance().getMyDAO1().doSomething();
到目前为止,这种策略对我们很有效(我们不需要切换实现),但我想知道如果我们能够开始新的,是否有更好的方法?我将 DAO 视为 bean 的自动装配,但我仍然需要在每个服务类中创建属性来表示正在使用的那些 DAO。在一个大型项目中,无论如何我都不愿意开始自动装配 bean——我们需要为所有开发人员提供可见性。
感觉就像我在 a.) 与实现紧密耦合,但代码/配置开销较少和 b.) 与接口松散耦合,但需要大量代码/配置开销之间来回切换。
我有没有更好的方法?中间有什么?欢迎发表意见。