【问题标题】:Pros and Cons of DAO dependent on DAOFactoryDAO 依赖 DAOFactory 的优缺点
【发布时间】:2016-03-26 10:35:21
【问题描述】:

最近我遇到了 DAO 有一个 DAOFactory 实例的代码。并且 DAOFactory 有 Connection。 DAO 使用 DAOFactory 的 Connection 进行操作。基本上 DAO 依赖于 DAOFactory。这是代码:

DAOFactory.java:

public abstract class DAOFactory {
   public static final int SQL_SERVER = 1;
   public static final int MY_SQL = 2;
   private Connection connection = null;

   public static DAOFactory getDAOFactory(int daoFactoryType) {
      DAOFactory daoFactory = null;

      switch (daoFactoryType) {
         case SQL_SERVER:
            daoFactory = new SQLServerDAOFactory();            
            break; 
         case MY_SQL:
            daoFactory = new MySQLDAOFactory(); 
            break; 
      }

      return daoFactory;
   }

   public Connection getConnection() {
      return connection;
   }
   public void setConnection(Connection connection) {
      this.connection = connection;
   }

   public abstract UserDAO getUserDAO();
   ...  
}

BaseDAO.java:

public abstract class BaseDAO {
   protected DAOFactory daoFactory;

   public BaseDAO(DAOFactory daoFactory) {
      this.daoFactory = daoFactory;
   }
}

UserDAO.java:

public interface UserDAO {
   public User getUserById(int userId) throws DAOException;
   ...
}

SQLServerUserDAO.java:

public class SQLServerUserDAO extends BaseDAO implements UserDAO {
   public SQLServerUserDAO (DAOFactory daoFactory) {
      super(daoFactory);
   }

   @Override
   public User getUserById(int userId) throws DAOException {
      // it uses the connection this way: this.daoFactory.getConnection();
      // implementation 
   }
}

SQLServerDAOFactory.java:

public final class SQLServerDAOFactory extends DAOFactory {
   @Override
   public UserDAO getUserDAO() {
      UserDAO userDAO = null;

      userDAO = new SQLServerUserDAO(this);
      return userDAO;
   }
}

我通常看到 DAO 有 Connection,但这个有 DAOFactory。

与具有 Connection 的 DAO 相比,使用这种具有 DAOFactory 的 DAO 方法的优缺点是什么?

【问题讨论】:

    标签: java dao genericdao


    【解决方案1】:

    优点:

    1. 根据所需的数据库连接创建对象。
    2. 然后根据创建的数据库创建User。
    3. 遵循标准抽象工厂设计模式。

    缺点:

    1. 无需为单独的连接使用单独的 UserDAO。一节课就可以完成。

    【讨论】:

      【解决方案2】:

      具有 DAOFactory 的 DAO 意味着更改工厂中的连接将更改从它创建的每个 dao 中的连接。这允许在知道连接实例之前创建 DAO。

      它的缺点是在 DAOFactory 和 DAO 之间创建循环依赖,并导致 DAO 的依赖比它们需要的多,这会增加代码的复杂性。

      【讨论】:

        猜你喜欢
        • 2010-12-17
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        相关资源
        最近更新 更多