2

最近、DAO に DAOFactory のインスタンスがあるコードを見つけました。そしてDAOFactoryには接続があります。DAO は DAOFactory の接続を使用して操作を行います。基本的に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;
   }
}

ユーザーDAO.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 のこのアプローチを使用することの長所と短所は何ですか?

4

2 に答える 2

2

DAOFactory を持つ DAO は、ファクトリで接続を変更すると、そこから作成されたすべての dao で接続が変更されることを意味します。これにより、接続インスタンスが認識される前に DAO を作成できます。

これには、DAOFactory と DAO の間に循環的な依存関係が作成され、DAO が必要以上の依存関係を持つようになり、コードが複雑になるという欠点があります。

于 2015-12-20T15:55:28.737 に答える