Я читал в некоторых статьях, что DAO не является обязательным в спящем режиме, и его реализация "зависит от обстоятельств", другими словами, мы можем выбирать между ORM и шаблоном DAO .
Хорошо, давайте предположим, что я не хочу использовать шаблон DAO, поэтому я использую только сеанс CRUD и операцию запроса, предоставляемую спящим режимом (мой ORM).
Специально для запросов «поиск» и «поиск» неправильно переписывать их всегда, поэтому разумно подумать о том, чтобы поместить их в класс.
Но тогда этот класс является простым DAO без какой-либо реализации шаблона DAO и DAOFactory, Итак, суть в том, что нам всегда нужен DAO, и выбор - тяжелая реализация DAO против облегченной реализации DAO?
Что я сказал не так?
EDIT Еще одна проблема, с которой я столкнулся, - это то, где разместить взаимодействия dao, например, мне нужно войти в систему и написать журнал входа (бесполезный пример, который я знаю ...)
Итак, в шаблоне DAO у меня есть все общие реализации dao, DAOFactory и, наконец, UserHibernateDAO и LogHibernateDAO. Операция входа в систему - это бизнес-метод :
private void login(String username, String password){
daoFactory.beginTransaction();
UserDAO userDao=daoFactory.HIBERNATE.getUserDao();
LogDAO logDao=daoFactory.HIBERNATE.getLogDao();
if(userDao.checkAccount(username, password){
User user=userDao.findByAccount(username, password);
logDao.save(new Log("log-in", user);
}
daoFactory.commit();
}
Разумно ли это? Могу ли я использовать дао таким образом? Если я хочу обработать исключение, лучше всего это сделать в бизнес-логике?
EDIT2 Предположим, что используется шаблон DAO, основная причина для этого - возможность переключаться между технологиями (ORM-> JDBC и т. Д.), Все в порядке, НО где я могу обрабатывать сеанс гибернации и транзакцию? Я не могу поместить его в DAO, это анти-шаблон, и я не могу поместить его на уровень обслуживания, потому что в гипогтетическом переключателе я должен удалить все эти транзакции (потому что другие технологии могут не использовать их).