最近刚学习数据库访问层的设计,DAO模式一般都是一个接口对应着一个实现类,如果以后要改数据库可以再创建一个实现类,但是如果不换数据库就只有一个实现类,结果就是每张表对应一个实现类还有一个接口,既然一个接口就只有一个实现类(永远都不更换数据库),这个接口存在着还有什么意义啊,而且明明每个表基本上都有增删改查方法,为什么每个接口都要声明一遍呢,怎么看都觉得不爽,有没有一种设计可以建立通用的接口,每张表的实现类都继承某个接口,就是一个接口有多个实现类的设计。
我想了一天觉得这样设计怎么样,希望高人给些建议。建立一个泛型的抽象类,增删改查的方法都设置成虚方法,每个表的实现类都去继承这个泛型的抽象类,用到哪个方法就重写哪个,这样既不用建立那么多的接口,又可以解耦。
有一种情况不知道算不算好处:在某个表的实现类里加特别的处理,比如类似事件,触发器的功能。有的时候项目时间特别紧,或者改别人的代码,改动需要尽量少的时候,直接在实现类里加方法,由于接口的存在,这些方法不会暴露给使用实体类的程序。
没分了,学习了
我本着学习交流的态度在博问里看看,我看了两个问题,你都有这么一个回复。如果你想通过这种方式赚积分,那么我只能说你态度不认真。
@朝曦: 误会了,没分我就不能问问题啊,不问问题怎么学习提高啊。
更多的layers可以减少耦合啊
这样的设计可以灵活的变更实现,而你改变的只是你的实现。
你说的那样设计没有必要,只是多抽象了一个顶层,下面的接口还是要分的,jdbc, spring, hibernate总不能写同一个接口用吧。
你也可以写一个父接口,在父接口里写一些增删改查的通用的方法,哪个类用到了就去实现父接口,如果还有其他方法也可以写新接口继承父接口,我的表达不清楚,不知道你明白我的意思不
我明白你的意思,我之前也是你这么想的,后来觉得情况太复杂了,因为子类可能就1个查询方法,或者其他的,这样的话可能会出现各种组合,后来就想声明一个顶层接口包含所有方法,再弄一个抽象类继承顶层接口,但是不去实现,再有子类去继承抽象类,用到哪个方法就重写。