DAO 与 ORM(休眠)模式 [已关闭]
我在一些文章中读到,DAO不是强制性的,休眠,它的实现是通过“它取决于”,换句话说,我们可以在ORM与DAO模式之间进行选择。
好吧,让我们假设我不想使用DAO模式,所以我只使用会话CRUD和休眠(我的ORM)提供的查询操作。
特别是对于“搜索”和“查找”查询,总是重写它们是不正确的,所以合理地认为把它们放到一个类中。
但是这个类是一个简单的DAO,没有DAO模式和DAOFactory的所有实现,只是一个DAO的轻量级实现。所以,关键是我们需要一个DAO,选择是重DAO实现还是轻量级DAO实现?
我说的不对劲?
编辑我遇到的另一个问题是把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();
}
这合理吗?我可以以这种方式使用道吗?如果我想处理异常,更好的地方是 ina 业务逻辑?
编辑2让我们假设使用DAO模式,这样做的主要原因是能够在tecnhology(ORM->JDBC等)之间切换,这一切都很好,但是我在哪里可以处理休眠会话和事务?我不能把它放到一个DAO中,它是anty模式,我不能把它放到一个服务层中,在一个hipohtycal开关中,我必须删除所有这些事务(becouse其他技术可能不使用它们)。