锁定老帖子 主题:DAO的一个讨论问题
精华帖 (1) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-05
DAO的操作,现在我正在用的是javabean的动态反射机制实现的。建立一个Bean,字段对应数据库的字段,然后通过动态反射机制分别和数据库表进行关联。然后进行对象转换!这是个大概的思路。如果自己有时间可以自己写一个,或者参照Hibernate写!感觉Hibernate的多表关联还是比较有难度的。现在只是实现单表操作!
|
|
返回顶楼 | |
发表时间:2008-08-25
个人认为这是不可取的。理由有4:
1)LZ所谓的整合DAO,其实是有悖于DAO的概念的,它本身就是对应一个库表的数据操作层 2)一个DAO只完成对一个表的操作,是为了重用性。将业务逻辑掺杂进去就破环了重用性 3)Service层(或叫Bussiness层)是用来体现业务逻辑的,将业务逻辑掺杂在更加靠后的DB层是不妥的 4)对于规范的工程,所有DAO都不该是程序员写的,而是有代码生成工具根据设计文档(如表定义书等)自动生成的。其中只是单纯的DB操作,不该也不能混入业务逻辑 以上只是个人观点,欢迎探讨 |
|
返回顶楼 | |
发表时间:2008-08-25
可以把各个Dao通用的方法写在一个Dao里,然后各个Dao继承这个公共的Dao比如说save(Object o),这样做的话就节省了很多的代码
|
|
返回顶楼 | |
发表时间:2008-08-25
楼主说的整合DAO应该指的是增加service层吧。
我对此的见解如下: 我不欣赏DAO--SERVICE--ACTION的结构设计(尽管它是经典的)。 首先,service层会很大,方法很多。 第二,试想,所有DAO都有增删改查四个基本方法。假设在DAO层(如StudentDAO.java)里student.add(),student.delete().student.update(),student.query()。 而如果应用增加了service层(如ApplictionServiceImpl.java),需要在service层中加上 applicationService.addStudent(),deleteStudent(),updateStudent(),queryStudent()四个方法。 这时你需要更新service层的接口类ApplicationService.Java,加上这四个方法。然后再更新service层的实现类ApplicationServiceImpl,加上这四个方法,最后你发现这四个方法每个方法里都只有一句话(以addStudent()为例) public int addStudent(Student student){ return student.add(); } 这样是不是太傻了点,还不如在action中直接调用StudentDAO中的student.add()。 以上是我的个人看法,请各位指点 |
|
返回顶楼 | |
发表时间:2008-08-28
action 一个action对应一个servlet请求 可调用多个service
service 一个service对应一个事务操作 可调用多个dao 其共享一个connection dao 一个dao对应一张表 目前我是这么做的 不同意的请拍砖 |
|
返回顶楼 | |
发表时间:2008-08-28
我想分层主要目的是为了解耦
|
|
返回顶楼 | |
发表时间:2008-11-03
你的意思是在dao上加了一层映射, 比如a.insert 调用 addp.insert然后 addp进行分析 调用相关的模型上的insert
想法不错,可惜有个问题是,业务与数据是直接挂钩的,数据一变,业务照样得变, 没实际意义, 而且这样做可能需要写的代码更多 不划算 |
|
返回顶楼 | |
发表时间:2009-05-08
最后修改:2009-05-08
<div class="quote_title">Nick_HF 写道</div><div class="quote_div"><pre name='code' class='java'>Action<-Service<-Dao<-DB 贴段代码,可能就比较清楚了 service Interface: public interface SpaScoreDAOService { public List getSpaScoreSupInfo(String supItems); .... } DAO:(IBatis) public class SpaScoreDAO extends SqlMapClientDaoSupport { public List getSpaScoreSupInfo(String supItems) { return this.getSqlMapClientTemplate().queryForList("getSpaScoreSupInfo",supItems); } Service implement: public class SpaScoreDAOImp implements SpaScoreDAOService { SpaScoreDAO spaScoreDAO; public List getSpaScoreSupInfo(String supItems) { ...业务逻辑 return spaScoreDAO.getSpaScoreSupInfo(supItems); } public SpaScoreDAO getSpaScoreDAO() { return spaScoreDAO; } public void setSpaScoreDAO(SpaScoreDAO paScoreDAO){ this.spaScoreDAO = spaScoreDAO; } Action: public class SpaScoreAction extends Action{ private SpaScoreDAOService spaScoreDAOService; public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) { //调用业务逻辑 List supitemList = spaScoreDAOService.getSpaScoreSupInf(supItems); ...... } public SpaScoreDAOService getSpaScoreDAOService() { return spaScoreDAOService; } public void setSpaScoreDAOService(SpaScoreDAOService spaScoreDAOService) { this.spaScoreDAOService = spaScoreDAOService; } </pre> <p> </p></div><br/> 请问对form提交的数据的验证是放在Action中还是在Service的getSpaScoreSupInfo(String supItems)方法中,如果是在getSpaScoreSupInfo(String supItems)方法中,对于错误提示信息如何反馈给客户端呢? |
|
返回顶楼 | |
发表时间:2009-05-08
iKing 写道 <div class="quote_title">Nick_HF 写道</div><div class="quote_div"><pre name='code' class='java'>Action<-Service<-Dao<-DB 贴段代码,可能就比较清楚了 service Interface: public interface SpaScoreDAOService { public List getSpaScoreSupInfo(String supItems); .... } DAO:(IBatis) public class SpaScoreDAO extends SqlMapClientDaoSupport { public List getSpaScoreSupInfo(String supItems) { return this.getSqlMapClientTemplate().queryForList("getSpaScoreSupInfo",supItems); } Service implement: public class SpaScoreDAOImp implements SpaScoreDAOService { SpaScoreDAO spaScoreDAO; public List getSpaScoreSupInfo(String supItems) { ...业务逻辑 return spaScoreDAO.getSpaScoreSupInfo(supItems); } public SpaScoreDAO getSpaScoreDAO() { return spaScoreDAO; } public void setSpaScoreDAO(SpaScoreDAO paScoreDAO){ this.spaScoreDAO = spaScoreDAO; } Action: public class SpaScoreAction extends Action{ private SpaScoreDAOService spaScoreDAOService; public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) { //调用业务逻辑 List supitemList = spaScoreDAOService.getSpaScoreSupInf(supItems); ...... } public SpaScoreDAOService getSpaScoreDAOService() { return spaScoreDAOService; } public void setSpaScoreDAOService(SpaScoreDAOService spaScoreDAOService) { this.spaScoreDAOService = spaScoreDAOService; } </pre> <p> </p></div><br/> 请问对form提交的数据的验证是放在Action中还是在Service的getSpaScoreSupInfo(String supItems)方法中,如果是在getSpaScoreSupInfo(String supItems)方法中,对于错误提示信息如何反馈给客户端呢? form提交的数据校验应该是放在action中进行校验的 比如Jsp->Action->Service->Dao->PO |
|
返回顶楼 | |
发表时间:2009-05-09
carrot 写道 最近的项目设计中,淡化dao层设计,dao层用泛型实现就可以了, 所有的实现都集中在业务层中,而且事务的提交也都是定义在Service层中。
这种不错 比以前的单独做个dao层觉得爽一点。。 |
|
返回顶楼 | |