Получение DAO для структуры Table-per-Hierarchy - PullRequest
0 голосов
/ 08 июля 2011

Предположим, у меня есть класс User и два подкласса Employee и Customer.Я реализовал эту иерархию в виде таблицы на иерархию в БД со столбцом для указания типа пользователя.Мне нужно вернуть правильный тип объекта при запросе этой таблицы.

Нужны ли отдельные DAO для каждого типа объектов, таких как CustomerDAO или EmployeeDAO, поэтому каждый возвращает свои соответствующие объекты Customer и Employee.Если да, то как получить их из DAOFactory без использования:

if(type.equlas('customer'))
    return customerDao;
else
    retrun employeeDao;

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

ИлиЕсть ли другой путь?Любая идея будет принята с благодарностью.

Примечание: Я не использую какой-либо фреймворк ORM и не планирую использовать один.

1 Ответ

0 голосов
/ 09 июля 2011

Если ваш код персистентности для каждого типа одинаков, то у вас может быть 1 универсальный DAO.

Таким образом, ваш пользователь dao может выглядеть примерно так:

interface DAO<T, ID> {
  T create(T t);
  T read(ID id);
  T update(T t);
  void delete(T t);  
}

class UserDAO<T extends User> implements DAO<T> {
    // Your methods for crud operations will be limited to types of User.
}

Тогда ваш заводкласс может создать правильный DAO, просто указав правильный тип.

class DAOFactory {
  public UserDAO<Employee> getEmployeeDAO() {
    return new UserDAO<Employee> ();
  }
}

С уважением
Юсуф

...