锁定老帖子 主题:关于面向接口编程、DAO
精华帖 (0) :: 良好帖 (3) :: 新手帖 (6) :: 隐藏帖 (4)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-28
最后修改:2009-07-28
还是老问题:DAO真的有必要,面向接口编程真的有用吗,spring提供@Service后是不是接口就不在需要定义了。 DAO有必要吗,业务逻辑和实现逻辑的分离,但是这种分离有必要吗,如果说是hibernate还可以理解,hibernate提供一个baseDao,包括CRUD。所有的业务处理在Service中调用Dao来完成,但是这样子,效率会不会太低了,hibernate效率本身就不高,再这样分下,效率不是更低了吗?比如我使用ibatis,service层还有必要吗,所有的业务逻辑都是直接通过操作sql来实现,如果在使用service的话,ibatis实现CRUD,servie实现业务,那这效率不是比直接使用sql来实现业务低了很多吗。Service+Dao的分层真的有必要吗? 至于面向接口编程,我真的体会不到什么好处,先抛开aop,就说spring的接口用处,我敢说,绝大多数项目都是一个接口对应一个接口实现类(不包括ssh中的baseDao和baseService这两个通用的接口),那这接口还有什么用,只是增加了一个繁琐罢了。而且spring2.5中提供了@Service后,接口还有什么用。dao接口,很多人都说是为了方便跨数据库开发,可是真的有几个项目用到两个以上的数据库。即使有,我针对不同的数据库写不同的dao不就行了,不可能说一个CRUD同时操作两个数据库吧,那也太BT了吧。还有一个说法是说,面向接口编程能开发人员分工更清楚,怎么更清楚,我看不出来,难道只是因为dao代码少吗?那我把实现代码收缩起来看起来不也是一样的了吗。。 很多人说做大系统时,就能看出接口的好处了,可是我看不出来,请各位大牛指点下,大系统怎么个好处法,什么好处,不要老说大系统有好处有好处,说出号出来,最好能举例说明下,感激不尽!!! 补充一句:面向接口编程,调试真的很不方便。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-29
我也只是个菜鸟,也还是个学生,在这我只是发表一点自己的理解,如果错误的请大家见谅及纠正,谢谢!
楼主你说的,直接在service理调用sql就行了?那我要说的是,如果你的service在不同的业务中用到了相同的sql操作,那你是不是要复制黏贴了?而这样的代码复用是效率最差的吧,因为当你要修改的时候,你必须同时修改所有如此sql操作的地方,当然,楼主可以说,你可以压缩相同的sql操作到一个帮助方法中,但是这样的话,和创建1个专门的DAO不就没区别了么! 其实看接口,我们可以看我们的电脑构造,因为我们的电脑也是面向接口的,这样才使我们能够更换使用不同的显卡,不同的内存等等,试想,如果你只面对威刚的内存条,当你觉得威刚内存条不好时怎么办?(只是打比方而已,不是说威刚内存条不好哦),现在你只用sql没问题,但是当客户需要别的数据库时呢?一个项目是有变化因素的,我们必须尽可能的考虑周全,当然这应该已经到了一个架构师的高度,我要说的是,用接口,还提高了一定的灵活性! 小弟在这吹嘘了,忘高人还多多指出错误之处,不甚感激! |
|
返回顶楼 | |
发表时间:2009-07-29
建议LZ去看看设计模式
|
|
返回顶楼 | |
发表时间:2009-07-29
楼主的疑问和我一样,我也超级怀疑,dao存在的必要性,在项目中试着将dao曾去掉,用一个泛型curd工具类,直接用servicesImp 操作session!!
|
|
返回顶楼 | |
发表时间:2009-07-29
lijia871022 写道 我也只是个菜鸟,也还是个学生,在这我只是发表一点自己的理解,如果错误的请大家见谅及纠正,谢谢!
楼主你说的,直接在service理调用sql就行了?那我要说的是,如果你的service在不同的业务中用到了相同的sql操作,那你是不是要复制黏贴了?而这样的代码复用是效率最差的吧,因为当你要修改的时候,你必须同时修改所有如此sql操作的地方,当然,楼主可以说,你可以压缩相同的sql操作到一个帮助方法中,但是这样的话,和创建1个专门的DAO不就没区别了么! 其实看接口,我们可以看我们的电脑构造,因为我们的电脑也是面向接口的,这样才使我们能够更换使用不同的显卡,不同的内存等等,试想,如果你只面对威刚的内存条,当你觉得威刚内存条不好时怎么办?(只是打比方而已,不是说威刚内存条不好哦),现在你只用sql没问题,但是当客户需要别的数据库时呢?一个项目是有变化因素的,我们必须尽可能的考虑周全,当然这应该已经到了一个架构师的高度,我要说的是,用接口,还提高了一定的灵活性! 小弟在这吹嘘了,忘高人还多多指出错误之处,不甚感激! 实际中有多少项目到底是经常换数据库呢!! |
|
返回顶楼 | |
发表时间:2009-07-29
呃。接口至少有两个好处:
1、动态代理。没办法,只能用接口,没什么说的。 2、业务切分。呃,就是一个实现类里面有很多方法,但是给某个模块使用一部份。。。举个JDK的例子,LinkedList实现了好几个类,在不同的场合他可以作为不同的身份出现,我记得好像有List, Iterator, Queue, Collection,还有啥忘了。。 如果想了解接口的用途,最好看看JDK的结构。。。 框架里面一个接口对一个实现类,其实是第一个原因造成的,如果没有用到,可以不跟风~~ |
|
返回顶楼 | |
发表时间:2009-07-29
我对接口不怀疑,只是一直质疑dao存在的必要性!!
|
|
返回顶楼 | |
发表时间:2009-07-29
kjj 写道 我对接口不怀疑,只是一直质疑dao存在的必要性!!
呃~我回的是原帖。。。 DAO。。。有必要就要,没必要就不要好了。ROR不就基本上不用DAO吗?Active Record基本就等于封好的Domain Object + Dao。。。何必把分层的东西看得那么重?3层,4层,5层,6层的系统多得是,没有什么好规定的,Java社区太多这种无谓的辩论了。。。 要还是不要,没有谁能给出肯定得答案,谁都说服不了谁。。。 这种争论就算了吧,没个人心中都有答案。你的答案不就是不要么?不要,也可以做出好的系统的,不会造成瓶颈的。 |
|
返回顶楼 | |
发表时间:2009-07-29
lijia871022 写道 我也只是个菜鸟,也还是个学生,在这我只是发表一点自己的理解,如果错误的请大家见谅及纠正,谢谢!
楼主你说的,直接在service理调用sql就行了?那我要说的是,如果你的service在不同的业务中用到了相同的sql操作,那你是不是要复制黏贴了?而这样的代码复用是效率最差的吧,因为当你要修改的时候,你必须同时修改所有如此sql操作的地方,当然,楼主可以说,你可以压缩相同的sql操作到一个帮助方法中,但是这样的话,和创建1个专门的DAO不就没区别了么! 其实看接口,我们可以看我们的电脑构造,因为我们的电脑也是面向接口的,这样才使我们能够更换使用不同的显卡,不同的内存等等,试想,如果你只面对威刚的内存条,当你觉得威刚内存条不好时怎么办?(只是打比方而已,不是说威刚内存条不好哦),现在你只用sql没问题,但是当客户需要别的数据库时呢?一个项目是有变化因素的,我们必须尽可能的考虑周全,当然这应该已经到了一个架构师的高度,我要说的是,用接口,还提高了一定的灵活性! 小弟在这吹嘘了,忘高人还多多指出错误之处,不甚感激! 我想说,大部份的过度设计就是从这种思想产生的。。。。 然后到处模式满天飞,这个架构那个架构。。。 切切实实把事情做好,少点点这些形而上学的讨论吧。 |
|
返回顶楼 | |
发表时间:2009-07-29
不要为了接口而接口,同样不要为了DAO而DAO,带来方便的设计才是好设计,JAVA世界已经足够复杂了,简单就是美。
|
|
返回顶楼 | |