首页 新闻 会员 周边

关于DAO的问题?

0
悬赏园豆:10 [已解决问题] 解决于 2013-04-02 20:39

最近刚学习数据库访问层的设计,DAO模式一般都是一个接口对应着一个实现类,如果以后要改数据库可以再创建一个实现类,但是如果不换数据库就只有一个实现类,结果就是每张表对应一个实现类还有一个接口,既然一个接口就只有一个实现类(永远都不更换数据库),这个接口存在着还有什么意义啊,而且明明每个表基本上都有增删改查方法,为什么每个接口都要声明一遍呢,怎么看都觉得不爽,有没有一种设计可以建立通用的接口,每张表的实现类都继承某个接口,就是一个接口有多个实现类的设计

我想了一天觉得这样设计怎么样,希望高人给些建议。建立一个泛型的抽象类,增删改查的方法都设置成虚方法,每个表的实现类都去继承这个泛型的抽象类,用到哪个方法就重写哪个,这样既不用建立那么多的接口,又可以解耦。

yui67806的主页 yui67806 | 初学一级 | 园豆:89
提问于:2013-02-20 19:08
< >
分享
最佳答案
0

有一种情况不知道算不算好处:在某个表的实现类里加特别的处理,比如类似事件,触发器的功能。有的时候项目时间特别紧,或者改别人的代码,改动需要尽量少的时候,直接在实现类里加方法,由于接口的存在,这些方法不会暴露给使用实体类的程序。

收获园豆:4
碧落星痕 | 小虾三级 |园豆:708 | 2013-02-20 22:37
其他回答(3)
0

没分了,学习了

收获园豆:2
Invictus | 园豆:76 (初学一级) | 2013-02-20 19:59

我本着学习交流的态度在博问里看看,我看了两个问题,你都有这么一个回复。如果你想通过这种方式赚积分,那么我只能说你态度不认真。

支持(1) 反对(0) 朝曦 | 园豆:1073 (小虾三级) | 2013-02-21 09:11

@朝曦: 误会了,没分我就不能问问题啊,不问问题怎么学习提高啊。

支持(0) 反对(0) Invictus | 园豆:76 (初学一级) | 2013-02-21 17:05
1

更多的layers可以减少耦合啊

这样的设计可以灵活的变更实现,而你改变的只是你的实现。

你说的那样设计没有必要,只是多抽象了一个顶层,下面的接口还是要分的,jdbc, spring, hibernate总不能写同一个接口用吧。

收获园豆:2
Brianlicorice | 园豆:198 (初学一级) | 2013-02-20 20:16
0

你也可以写一个父接口,在父接口里写一些增删改查的通用的方法,哪个类用到了就去实现父接口,如果还有其他方法也可以写新接口继承父接口,我的表达不清楚,不知道你明白我的意思不

收获园豆:2
淘@淘 | 园豆:602 (小虾三级) | 2013-02-22 15:16

我明白你的意思,我之前也是你这么想的,后来觉得情况太复杂了,因为子类可能就1个查询方法,或者其他的,这样的话可能会出现各种组合,后来就想声明一个顶层接口包含所有方法,再弄一个抽象类继承顶层接口,但是不去实现,再有子类去继承抽象类,用到哪个方法就重写。

支持(0) 反对(0) yui67806 | 园豆:89 (初学一级) | 2013-02-22 20:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册