Что такое шаблон 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 как о "виртуальном конструкторе": его метод создания возвращает тип интерфейса, но вы можете попросить его создать любое количество различных реализаций по мере необходимости.