锁定老帖子 主题:只需要一个DAO,是个好主意吗?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-23
只有一个估计会困难点,两个吧 ,一个HIBERNATE的支持POJO一个用JDBC的jdbcTemplate.SQL本来就是业务逻辑的一部分,可以考虑用ibatis.
|
|
返回顶楼 | |
发表时间:2009-07-06
刚发表了篇文章“我给dao的瘦身方法请大虾拍砖!”,打算这样实现,大虾们可以看看拍拍砖!http://www.iteye.com/topic/420989
|
|
返回顶楼 | |
发表时间:2009-07-09
最后修改:2009-07-09
jacklondon 写道 如果 SQL 以及 SQL PreparedStatement 参数准备,都不在 DAO 中,那么实际上可以将 DAO 简化。
不建议将 SQL PreparedStatement 参数准备放在 DAO 之外的地方。一般都是这样: public class LoginDAO{ boolean validateUserPass(String userLoginName,String pass){ PreparedStatement stmt = ... Object[] parameters = {userLoginName,pass}; mergePreparedStatementAndParameters(stmt,parameters); stmt.exec.... } } 建议的 DAO 参数传入为 (String userLoginName,String pass), 不建议用 (Object[] parameters).估计搂主的DAO 参数传递是用 (String sqlId,Object[] parameters),这样才会想到简化成一个 DAO. 我不太喜欢 Ibatis, SQL 准备与参数准备分开,很难发现参数传递顺序错误。我们现在使用 middle-gen + ANT 来自动生成基于 JDBC 的 DAO/model, 每个表一个 DAO,不用人工写一行代码,也很方便。 我不是很理解关于 "Ibatis, SQL 准备与参数准备分开,很难发现参数传递顺序错误。"的观点,ibatis的参数是面向对象,似乎并不存在需要解析参数顺序的问题. 如果我们在这里把DAO是一个面向statement的query的话,我想一个类就足够了.(事实上所谓的date access 工作我们交给ibatis去干了,这里的BaseDao已经失去了作为DAO的意义,它不过是一个更方便的util) 当然如果想做更多的事情,对BaseDao做扩展我也没觉得有什么别扭的. |
|
返回顶楼 | |
发表时间:2009-07-09
我做CRM时就是每个service对应一个dao,项目收尾,越发觉得代码冗余到不可想象的地步,非常痛苦,最近不这么做了,全部封装到一个BaseDao,实现类继承该类,调用该类中的方法,传入自己的参数,这样好多了
|
|
返回顶楼 | |
发表时间:2009-07-24
DAO是否分解,涉及到了一个问题,元问题,我们抛去开发的工作量,所有的DAO都放在一个文件中,是否符合java开发的思想呢。既然面向对象,DAO,就是一个对象的一部分,所以适当的分解DAO文件,是一个好主意
|
|
返回顶楼 | |
发表时间:2009-07-26
最后修改:2009-07-26
人的思想永远是第一位的,考虑问题的目的不是服务于某个语言,应该善于利用工具,代码少的项目自然调理清晰,dao的目的是为了解耦以及单元测试,但感觉有时候是为了解耦而解耦,对于一般项目,更换底层数据库的情况少之又少,对于数据层的解耦变得毫无意义。
|
|
返回顶楼 | |
发表时间:2009-10-03
Laynepeng 写道 我怎么觉得回复都没注意看原文呢?作者现在的问题是:
他们把所有的HQL,SQL全部放在外部XML里面,然后DAO层只是通过读取外部XML调用里面完成业务的HQL/SQL。 这种方式我之前一个项目见过,但更好玩一点,外部是一个properties文件,然后通过key获取SQL,完成查询。Hibernate都没有用。但是在这里,我感觉和你们的解决方案没什么区别。。。 我觉得从代码易读性来看。按照Domain分一分开会不会让程序更清楚一点?我还是潜水去各位大虾的意见吧。。。 我现在手上的两个项目都是把sql/hql语句放在properties文件里的,但语句可以放,参数不能放,所以同一个查询,因为参数条件的不同,还是得重载dao函数.map是能解决一定的问题,但不是全部... |
|
返回顶楼 | |
发表时间:2009-10-04
我觉得还是简单直接,傻傻的dao好,可以多人并行工作,也便于初级成员上手。
|
|
返回顶楼 | |
发表时间:2009-10-23
snakeqi 写道 封装了基本CRUD操作的DAO可以作为基类,其它有特殊要求的DAO可以继承这个DAO,这样既做到了代码重用,也可以把变化的部分分离。
这样做不错! |
|
返回顶楼 | |