`

DAO层当前还应该继续存在

阅读更多
DAO层当前应该存在,原因如下:
1,必尽还是关系数据库的时代,还有对于数据库访问不同数据库还是有存在差异,用DAO层实现来解决差异,除非ORM足够强大,根本不存在。
2,DAO分担业务层的逻辑(小逻辑),就如domain层实体里不光是setter,getter的原里一样。但这层逻辑业务仅针对DAO对应的domain层相关逻辑,否则建议到service层。
3,service层应该是主要业务逻辑,不关心应用逻是什么,service的逻辑接口应该永远不了,除非业务改变。个人认为我们的业务主逻辑图都在service层,再配罗dao的小逻辑,(千万不要把hibernate的HQL,或者 相关SQL在这里中写逻辑,初学者误区)。
4,DAO可以认为是大海,有无穷的资源,而service是大海上的船,是dao层上按需所取,船下的海域就是不同dao的小业务逻辑。dao与entity应该是强偶合性的,service以上是松偶合。
5,service不光要dao层,还是分布式,远程访问。就是银行转账的扩展。一般应用都是调用银行接口转账,还有相应的业务关联。转账可能不是一个事务的问题了(当然业务层的设计也可以解决,只是简单举例)
分享到:
评论
15 楼 daweiangel 2008-12-03  
tianhaoleng 写道
楼主不存在了,DAO都应该还存在。

这句太经典了
14 楼 meconsea 2008-12-03  
偶也来忽悠两句!
当你看完Warp-persist和Guice集成之后 就会发现DAO可以不存在。
其实DAO层设计 只是一个理念,分而治之的理念!DAO关注的persist。Service关注的Logic,而Logic是perisit的集合。所以DAO只是理念的。如果你在Servie直接用meta的操作实现logic也是可以的。
warp-persist中 你可以不定义DAO,也可以直接放在Entity中。可以直接定义Accessor(类dao)或Service。

所以DAO只是N Layer 架构初期的一种设计理念!如果从技术角度去实现和变通的话,可以不存在。但是理念一定要清楚,就跟SOA一样,他就是一个设计理念。
13 楼 flyfan 2008-12-03  
只用一个Dao
12 楼 tianhaoleng 2008-12-03  
楼主不存在了,DAO都应该还存在。
11 楼 theiiidoor 2008-12-03  
sys53 写道
实际上我的团队,都把HQL把语句都写在SERVICE中了,DAO只是简单的save,delete,find,iterator,搞得dao 太纯,service又有DAO中功能。


可以考虑把DAO统一起来,变成一个~
10 楼 whaosoft 2008-12-02  
呃 真是说法不一啊~
9 楼 sys53 2008-12-02  
如果只是企业应用,只有几个人同时在线在处理的应用,那么DAO就是鸡肋,或者说service直接去了,由DAO担负SERVICE的职责。用spring OpenSessionInView Filter中解决好了。不用去考虑http的io而导致数据库阻塞,或者死锁。一个高性能的web程序,个人认为调用service是异步的,增加超时功能异常功能。web应用只是处理ui的请求,以及业务的委托调用处理。
8 楼 merman 2008-12-02  
DAO就是个鸡肋,起不到什么作用,又好像有一些存在的必要。
7 楼 sys53 2008-12-02  
实际上我的团队,都把HQL把语句都写在SERVICE中了,DAO只是简单的save,delete,find,iterator,搞得dao 太纯,service又有DAO中功能。
6 楼 upheart 2008-12-02  
理论上似乎如此,实际上用不着那么复杂……
5 楼 sys53 2008-12-02  
<p><span style='color: #810081;'>是针对下面这个贴子的</span></p>
<p><span style='text-decoration: underline;'><span style='color: #810081;'><a href='/topic/283668'>一个简单例子:贫血模型or领域模型</a></span></span></p>
4 楼 nomandia 2008-12-02  
<p>貌似标题和内容都很迷离啊。。。DAO就是对数据访问的封装,仅此而已之多根据需要做一点较小逻辑上的变通或整合而已,为的方便调用者使用比如某些习惯性的流程。要不全是CRUD了。<img src='/images/smiles/icon_arrow.gif' alt=''/></p>
<p> </p>
3 楼 sys53 2008-12-02  
godson_2003 写道
怎么出来这么个话题?4的比喻似乎不恰当

DAO直接在数据库进行持久,也可能缓存是内存中,由持久层来决定,因为OO模式,很多实现可能因为one-many,many-one,many-many偶合存在。DAO层不会把所有的从数据库中取出,可能是在内层中,可能是在数据库,顾比喻成大海,而service可能因为业务需,只取一部份资源。
2 楼 godson_2003 2008-12-02  
怎么出来这么个话题?4的比喻似乎不恰当
1 楼 ThinkingInAll 2008-12-02  
我这里已经很少看到DAO了

相关推荐

    SSH整合AJAX验证用户名存在的完整实例

    3. **Spring Service**:创建一个Spring服务接口和实现,负责调用Hibernate的DAO来查询数据库,检查用户名是否存在。如果存在,返回true,否则返回false。 4. **Hibernate DAO**:在Hibernate数据访问对象中,编写...

    mybatis逆向工程扩展实现.pdf

    但是,为了减少开发的重复性工作,人们希望在生成DAO层代码的同时,也能够生成业务层(Service)和控制层(Controller)的代码,以实现真正意义上的快速开发和提升效率。 Mybatis是一个持久层框架,它通过使用XML或...

    ssm注解开发

    4. **`propagation`**:事务传播行为,定义了当前事务应该如何与已存在的事务相结合。 - `REQUIRED`:默认值,如果当前存在事务,则加入该事务;如果没有,则新建一个事务。 - `SUPPORTS`:如果当前存在事务,则...

    关于OpenSessionInViewFilter的学习

    1. 当请求到达Controller时,OpenSessionInViewFilter会检查当前线程中是否已经存在Session,如果不存在,它将创建一个新的Session,并绑定到当前线程。 2. 控制器执行业务逻辑,调用DAO进行数据库操作。由于...

    往数据库插入数据,相同的不插入

    它可能利用了Hibernate框架提供的DAO层接口实现。 - **`UserInfo userInfo = new UserInfo(name);`**:这里创建了一个新的`UserInfo`对象,并设置了其`userName`属性为`name`。 - **`matad.setUserInfo(userInfo);...

    基于J2EE的业绩考核管理系统的设计与实现

    然而,系统仍然存在一些不足之处,例如用户体验可以进一步优化、功能模块还可以更加丰富等。未来的研究方向将是继续完善现有系统,并探索更多创新的技术来提升系统的性能和用户体验。 总之,本系统为企业提供了一套...

    A类B类C类嵌套事务问题相关类

    3. **事务传播行为**:在使用Spring等框架时,可以通过@Transactional注解设置事务的传播行为,例如REQUIRED(如果当前没有事务,则新建一个,否则加入到当前事务)、REQUIRES_NEW(总是新建一个事务,如果存在事务...

    DDAP-FPMA第二轮性能提升测试报告2

    附件一提供了详细的实测数据,包括DAO层查询、后端封装、网络传输、前端解析和绘图渲染等各环节的时间消耗,为后续性能调优提供了具体参考。通过对比实测1和实测2的结果,可以看出优化硬件平台对提升系统性能的重要...

    struts+spring+Hibernate

    2. **优秀的 ORM 实现**:作为主流的 ORM(对象关系映射)框架之一,Hibernate 大大简化了 DAO 层的编码工作。 3. **透明性**:使用 Java 反射机制而非字节码增强程序实现,使得 Hibernate 的使用更加简单直观。 4. ...

Global site tag (gtag.js) - Google Analytics