Что такое шаблон DAO factory?

Мне известны методы factory и abstract factory, но я хочу создать шаблон DAO factory в Java.

  • Я хочу знать его важность.
  • Использование

Я проверил эту ссылку, но мне трудно понять.

Может ли кто-нибудь объяснить это с помощью примера?

Изменить: Вот пример шаблона DAO, как я его понял:

public interface UserDAO {
    public void insert(User user);
    public void update(User user);
    public void delete(int userId);
}

Реализация:

public class UserDAOImpl implements UserDAO {
    @Override
    public void delete(int userId) {
        // delete user from user table
    }

    @Override
    public User[] findAll() {
        // get a list of all users from user table
        return null;
    }

    @Override
    public User findByKey(int userId) {
        // get a user information if we supply unique userid
        return null;
    }

    @Override
    public void insert(User user) {
        // insert user into user table
    }

    @Override
    public void update(User user) {
        // update user information in user table
    }
}

Factory:

public class UserDAOFactory {
    public static UserDAO getUserDAO(String type) { 
        if (type.equalsIgnoreCase("jdbc")) {
            return new UserDAOImpl();
        } else {
            return new UserDAOImpl();
        }
    }
}

Клиентский код:

User user=new User();
user.setName("Jinoy P George");
user.setDesignation("Programmer");
user.setAge(35);
//get a reference to UserDAO object
UserDAO userDAO=UserDAOFactory.getUserDAO("jdbc");
//call insert method by passing user object
userDAO.insert(user);

Правильно ли это шаблон dao?

Где я должен открыть соединение и закрыть его?

Ответ 1

Возможно, что вы не понимаете, как работает код? Кажется хорошо.

Просто FYI:

  • То, что определено как UserDAOImpl, может быть лучше понято, если вы рассматриваете его как UserDAOMySQLImpl и другое новое как UserDAOMSSQLImpl и т.д. для каждого доступа к базе данных, которое вам может понадобиться.

  • В каждом из них вы должны обрабатывать соединения и добавлять другие вещи, такие как частные функции для этой конфигурации сервера базы данных, которые могут потребоваться и не должны быть принудительно объявлены в интерфейсе (UserDAO), но как минимум вы всегда должны реализовать все методы, определенные в интерфейсе, а затем в условиях Factory (UserDAOFactory) вы можете иметь что-то вроде этого:

`

public class UserDAOFactory{

    public static UserDAO getUserDAO(String type){ 
        if (type.equalsIgnoreCase("mysql")){
            return new UserDAOMySQLImpl();
        }else{
            return new UserDAOMSSQLImpl();
        }
    }
}

Немного яснее?

Затем на стороне клиента вместо жесткой строки, например:

UserDAO userDAO=UserDAOFactory.getUserDAO("jdbc");

У вас может быть файл свойств, позволяющий динамически переключаться между DAO, извлекая эту строку из файла свойств, который вы можете просто сделать:

UserDAO userDAO=UserDAOFactory.getUserDAO(myStringFromPropertiesFile);

myStringFromPropertiesFile будет содержать "mysql" или "mssql" в соответствии с определением в вашем файле свойств.

Надеюсь, это поможет!

Ответ 2

DAO означает "Объект доступа к данным". Это класс на основе интерфейса, который обрабатывает все ваши операции CRUD с реляционной базой данных для определенного объекта. Вот пример, который использует generics:

package persistence;

public interface GenericDao<K extends Serializable, T> 
{
    public T find(K id);
    public List<T> find();
    public K save(T value);
    public void update(T value);
    public void delete(T value);
}

Подумайте о factory как о "виртуальном конструкторе": его метод создания возвращает тип интерфейса, но вы можете попросить его создать любое количество различных реализаций по мере необходимости.