DAO解耦的本质——设计原则

DAO是用于访问数据的对象,数据可以保存到数据库、文件、网络、缓存中,存储介质多种多样

即便是同种存储介质也有不同的访问方法,例如数据库,可以用不同的持久化框架和JDBC来实现数据的数据库存储。

为了实现业务层和数据访问之间的解耦,定义DAO接口,用具体的技术实现DAO接口,业务层调用DAO接口进行数据的访问,当要切换不同的数据访问技术时,业务层无需改动,用新的访问技术去实现DAO层的实现即可。

DAO可以屏蔽存储介质的不同和具体的实现方法的不同,从而实现了DAO的解耦。

解耦的本质是抽象,先分析的具体的不同是哪些,再根据情况进行统一。把不同进行统一,把不同的操作抽象出一组接口或抽象类,上层调用抽象,不用管具体实现,而下层可以根据需要进行扩展,添加新的方法等,层次关系为:上层业务——抽象操作接口——下层对接口的具体实现。这也体现了设计原则中的开—闭原则,对上层修改关闭,对下层扩展开放。

Spring的DAO的解耦:Spring提供了统一的异常体系和统一的模板类访问技术,屏蔽的不同持久化技术不同的异常体系,也屏蔽了不同持久化技术不同的数据访问技术。这就为定义DAO层接口时提供了极大的便利。

试想,如果你定义一个DAO接口,具体实现为Mybatis技术,那你接口抛出的异常就是Mybatis自带的异常
当你要更换实现技术时,比如使用JDBC来实现,那么你接口就要修改了,抛出新的异常,对接口的修改会直接影响上层的调用,上层也需要对此作出相应的修改,这样还是强耦合了
当然你可以自己把各种异常抽象化,抛出统一的异常,但是Spring已经为你做了这件事了,减轻了你的负担,这也是使用Spring的好处之一。
接口可以屏蔽具体实现,除了实现的不同,还有很多其他不同存在,对DAO来说,就存在了异常体系的不同,为此就行抽象,统一。解耦可以避免让具体的实现入侵到用户的上层代码中,Spring也是以统一的方式进行各种抽象,从而实现各种解耦,最后达到无侵入性同时具备扩展性的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值